Skip to content

Commit 62bba87

Browse files
committed
feat(api, core): add metrics table
1 parent 9d5256a commit 62bba87

File tree

8 files changed

+85
-5
lines changed

8 files changed

+85
-5
lines changed

src/server/api/go/internal/bootstrap/container.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ func BuildContainer() *do.Injector {
5959
&model.ToolReference{},
6060
&model.ToolSOP{},
6161
&model.ExperienceConfirmation{},
62+
&model.Metric{},
6263
)
6364
}
6465

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package model
2+
3+
import (
4+
"time"
5+
6+
"github.com/google/uuid"
7+
)
8+
9+
type Metric struct {
10+
ID uuid.UUID `gorm:"type:uuid;default:gen_random_uuid();primaryKey" json:"id"`
11+
ProjectID uuid.UUID `gorm:"type:uuid;not null;index:idx_metric_project_id_tag_created_at,priority:1" json:"project_id"`
12+
13+
Tag string `gorm:"type:text;not null;index:idx_metric_project_id_tag_created_at,priority:2" json:"tag"`
14+
Increment int `gorm:"not null;default:0" json:"increment"`
15+
16+
CreatedAt time.Time `gorm:"autoCreateTime;not null;default:CURRENT_TIMESTAMP;index:idx_metric_project_id_tag_created_at,priority:3" json:"created_at"`
17+
UpdatedAt time.Time `gorm:"autoUpdateTime;not null;default:CURRENT_TIMESTAMP" json:"updated_at"`
18+
19+
// Metric <-> Project
20+
Project *Project `gorm:"foreignKey:ProjectID;references:ID;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;" json:"-"`
21+
}
22+
23+
func (Metric) TableName() string { return "metrics" }

src/server/api/go/internal/modules/model/project.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ type Project struct {
2727

2828
// Project <-> ToolReference
2929
ToolReferences []ToolReference `gorm:"constraint:OnDelete:CASCADE,OnUpdate:CASCADE;" json:"-"`
30+
31+
// Project <-> Metric
32+
Metrics []Metric `gorm:"constraint:OnDelete:CASCADE,OnUpdate:CASCADE;" json:"-"`
3033
}
3134

3235
func (Project) TableName() string { return "projects" }

src/server/core/acontext_core/schema/orm/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from .tool_reference import ToolReference
1111
from .tool_sop import ToolSOP
1212
from .experience_confirmation import ExperienceConfirmation
13+
from .metric import Metric
1314

1415
__all__ = [
1516
"ORM_BASE",
@@ -28,4 +29,5 @@
2829
"ToolReference",
2930
"ToolSOP",
3031
"ExperienceConfirmation",
32+
"Metric",
3133
]

src/server/core/acontext_core/schema/orm/base.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from sqlalchemy.dialects.postgresql import UUID
33
from datetime import datetime
44
from dataclasses import dataclass, field, fields
5-
from pydantic import ValidationError
65
from sqlalchemy.orm import registry, RelationshipProperty
76
from sqlalchemy import Column
87
from sqlalchemy.sql import func

src/server/core/acontext_core/schema/orm/message.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import json
21
from dataclasses import dataclass, field
32
from sqlalchemy import String, ForeignKey, Index, CheckConstraint, Column
43
from sqlalchemy.orm import relationship
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from dataclasses import dataclass, field
2+
from sqlalchemy import Column, ForeignKey, Index, Integer, String
3+
from sqlalchemy.orm import relationship
4+
from sqlalchemy.dialects.postgresql import UUID
5+
from typing import TYPE_CHECKING
6+
from .base import ORM_BASE, CommonMixin
7+
from ..utils import asUUID
8+
9+
if TYPE_CHECKING:
10+
from .project import Project
11+
12+
13+
@ORM_BASE.mapped
14+
@dataclass
15+
class Metric(CommonMixin):
16+
__tablename__ = "metrics"
17+
18+
__table_args__ = (
19+
Index(
20+
"idx_metric_project_id_tag_created_at", "project_id", "tag", "created_at"
21+
),
22+
)
23+
24+
project_id: asUUID = field(
25+
metadata={
26+
"db": Column(
27+
UUID(as_uuid=True),
28+
ForeignKey("projects.id", ondelete="CASCADE"),
29+
nullable=False,
30+
)
31+
}
32+
)
33+
34+
tag: str = field(metadata={"db": Column(String, nullable=False)})
35+
36+
increment: int = field(
37+
default=0,
38+
metadata={"db": Column(Integer, nullable=False, default=0)},
39+
)
40+
41+
# Relationships
42+
project: "Project" = field(
43+
init=False, metadata={"db": relationship("Project", back_populates="metrics")}
44+
)

src/server/core/acontext_core/schema/orm/project.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import uuid
21
from dataclasses import dataclass, field
3-
from sqlalchemy import String, Index, Column, ForeignKey
2+
from sqlalchemy import String, Index, Column
43
from sqlalchemy.orm import relationship
5-
from sqlalchemy.dialects.postgresql import JSONB, UUID
4+
from sqlalchemy.dialects.postgresql import JSONB
65
from typing import TYPE_CHECKING, List, Optional
76
from .base import ORM_BASE, CommonMixin
87

@@ -11,6 +10,7 @@
1110
from .session import Session
1211
from .task import Task
1312
from .tool_reference import ToolReference
13+
from .metric import Metric
1414

1515

1616
@ORM_BASE.mapped
@@ -67,3 +67,12 @@ class Project(CommonMixin):
6767
)
6868
},
6969
)
70+
71+
metrics: List["Metric"] = field(
72+
default_factory=list,
73+
metadata={
74+
"db": relationship(
75+
"Metric", back_populates="project", cascade="all, delete-orphan"
76+
)
77+
},
78+
)

0 commit comments

Comments
 (0)