| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package service
- import (
- "context"
- "time"
- infraerrors "github.com/Wei-Shaw/sub2api/internal/pkg/errors"
- )
- // Error definitions for user attribute operations
- var (
- ErrAttributeDefinitionNotFound = infraerrors.NotFound("ATTRIBUTE_DEFINITION_NOT_FOUND", "attribute definition not found")
- ErrAttributeKeyExists = infraerrors.Conflict("ATTRIBUTE_KEY_EXISTS", "attribute key already exists")
- ErrInvalidAttributeType = infraerrors.BadRequest("INVALID_ATTRIBUTE_TYPE", "invalid attribute type")
- ErrAttributeValidationFailed = infraerrors.BadRequest("ATTRIBUTE_VALIDATION_FAILED", "attribute value validation failed")
- )
- // UserAttributeType represents supported attribute types
- type UserAttributeType string
- const (
- AttributeTypeText UserAttributeType = "text"
- AttributeTypeTextarea UserAttributeType = "textarea"
- AttributeTypeNumber UserAttributeType = "number"
- AttributeTypeEmail UserAttributeType = "email"
- AttributeTypeURL UserAttributeType = "url"
- AttributeTypeDate UserAttributeType = "date"
- AttributeTypeSelect UserAttributeType = "select"
- AttributeTypeMultiSelect UserAttributeType = "multi_select"
- )
- // UserAttributeOption represents a select option for select/multi_select types
- type UserAttributeOption struct {
- Value string `json:"value"`
- Label string `json:"label"`
- }
- // UserAttributeValidation represents validation rules for an attribute
- type UserAttributeValidation struct {
- MinLength *int `json:"min_length,omitempty"`
- MaxLength *int `json:"max_length,omitempty"`
- Min *int `json:"min,omitempty"`
- Max *int `json:"max,omitempty"`
- Pattern *string `json:"pattern,omitempty"`
- Message *string `json:"message,omitempty"`
- }
- // UserAttributeDefinition represents a custom attribute definition
- type UserAttributeDefinition struct {
- ID int64
- Key string
- Name string
- Description string
- Type UserAttributeType
- Options []UserAttributeOption
- Required bool
- Validation UserAttributeValidation
- Placeholder string
- DisplayOrder int
- Enabled bool
- CreatedAt time.Time
- UpdatedAt time.Time
- }
- // UserAttributeValue represents a user's attribute value
- type UserAttributeValue struct {
- ID int64
- UserID int64
- AttributeID int64
- Value string
- CreatedAt time.Time
- UpdatedAt time.Time
- }
- // CreateAttributeDefinitionInput for creating new definition
- type CreateAttributeDefinitionInput struct {
- Key string
- Name string
- Description string
- Type UserAttributeType
- Options []UserAttributeOption
- Required bool
- Validation UserAttributeValidation
- Placeholder string
- Enabled bool
- }
- // UpdateAttributeDefinitionInput for updating definition
- type UpdateAttributeDefinitionInput struct {
- Name *string
- Description *string
- Type *UserAttributeType
- Options *[]UserAttributeOption
- Required *bool
- Validation *UserAttributeValidation
- Placeholder *string
- Enabled *bool
- }
- // UpdateUserAttributeInput for updating a single attribute value
- type UpdateUserAttributeInput struct {
- AttributeID int64
- Value string
- }
- // UserAttributeDefinitionRepository interface for attribute definition persistence
- type UserAttributeDefinitionRepository interface {
- Create(ctx context.Context, def *UserAttributeDefinition) error
- GetByID(ctx context.Context, id int64) (*UserAttributeDefinition, error)
- GetByKey(ctx context.Context, key string) (*UserAttributeDefinition, error)
- Update(ctx context.Context, def *UserAttributeDefinition) error
- Delete(ctx context.Context, id int64) error
- List(ctx context.Context, enabledOnly bool) ([]UserAttributeDefinition, error)
- UpdateDisplayOrders(ctx context.Context, orders map[int64]int) error
- ExistsByKey(ctx context.Context, key string) (bool, error)
- }
- // UserAttributeValueRepository interface for user attribute value persistence
- type UserAttributeValueRepository interface {
- GetByUserID(ctx context.Context, userID int64) ([]UserAttributeValue, error)
- GetByUserIDs(ctx context.Context, userIDs []int64) ([]UserAttributeValue, error)
- UpsertBatch(ctx context.Context, userID int64, values []UpdateUserAttributeInput) error
- DeleteByAttributeID(ctx context.Context, attributeID int64) error
- DeleteByUserID(ctx context.Context, userID int64) error
- }
|