| package schema | |
| import ( | |
| "github.com/Wei-Shaw/sub2api/ent/schema/mixins" | |
| "entgo.io/ent" | |
| "entgo.io/ent/dialect/entsql" | |
| "entgo.io/ent/schema" | |
| "entgo.io/ent/schema/edge" | |
| "entgo.io/ent/schema/field" | |
| "entgo.io/ent/schema/index" | |
| ) | |
| // UserAttributeValue holds a user's value for a specific attribute. | |
| // | |
| // This entity stores the actual values that users have for each attribute definition. | |
| // Values are stored as strings and converted to the appropriate type by the application. | |
| type UserAttributeValue struct { | |
| ent.Schema | |
| } | |
| func (UserAttributeValue) Annotations() []schema.Annotation { | |
| return []schema.Annotation{ | |
| entsql.Annotation{Table: "user_attribute_values"}, | |
| } | |
| } | |
| func (UserAttributeValue) Mixin() []ent.Mixin { | |
| return []ent.Mixin{ | |
| // Only use TimeMixin, no soft delete - values are hard deleted | |
| mixins.TimeMixin{}, | |
| } | |
| } | |
| func (UserAttributeValue) Fields() []ent.Field { | |
| return []ent.Field{ | |
| // user_id: References the user this value belongs to | |
| field.Int64("user_id"), | |
| // attribute_id: References the attribute definition | |
| field.Int64("attribute_id"), | |
| // value: The actual value stored as a string | |
| // For multi_select, this is a JSON array string | |
| field.Text("value"). | |
| Default(""), | |
| } | |
| } | |
| func (UserAttributeValue) Edges() []ent.Edge { | |
| return []ent.Edge{ | |
| // user: The user who owns this attribute value | |
| edge.From("user", User.Type). | |
| Ref("attribute_values"). | |
| Field("user_id"). | |
| Required(). | |
| Unique(), | |
| // definition: The attribute definition this value is for | |
| edge.From("definition", UserAttributeDefinition.Type). | |
| Ref("values"). | |
| Field("attribute_id"). | |
| Required(). | |
| Unique(), | |
| } | |
| } | |
| func (UserAttributeValue) Indexes() []ent.Index { | |
| return []ent.Index{ | |
| // Unique index on (user_id, attribute_id) | |
| index.Fields("user_id", "attribute_id").Unique(), | |
| index.Fields("attribute_id"), | |
| } | |
| } | |