package system import ( "context" "time" "management/internal/db/model/dto" "github.com/google/uuid" ) type UserRepository interface { Create(ctx context.Context, obj *User) error Update(ctx context.Context, obj *User) error Get(ctx context.Context, id int32) (*User, error) GetByEmail(ctx context.Context, email string) (*User, error) All(ctx context.Context) ([]*User, error) List(ctx context.Context, q dto.SearchDto) ([]*User, int64, error) } type User struct { ID int32 `json:"id" gorm:"primaryKey;autoIncrement;not null"` Uuid uuid.UUID `json:"uuid" gorm:"type:uuid;not null;uniqueIndex"` Email string `json:"email" gorm:"type:varchar(100);not null;uniqueIndex"` Username string `json:"username" gorm:"type:varchar(100);not null;uniqueIndex"` HashedPassword []byte `json:"-" gorm:"type:bytea;not null;"` Salt string `json:"-" gorm:"type:varchar(20);not null;"` Avatar string `json:"avatar" gorm:"type:varchar(200);not null;"` Gender int32 `json:"gender" gorm:"type:int;not null;default:0;"` DepartmentID int32 `json:"department_id" gorm:"type:int;not null;default:0;"` RoleID int32 `json:"role_id" gorm:"type:int;not null;default:0;"` Status int32 `json:"status" gorm:"type:int;not null;default:0;"` ChangePasswordAt time.Time `json:"-" gorm:"type:timestamptz;not null;default:'0001-01-01 00:00:00+8';"` CreatedAt time.Time `json:"created_at" gorm:"type:timestamptz;not null;default:'now()'"` UpdatedAt time.Time `json:"updated_at" gorm:"type:timestamptz;not null;default:'0001-01-01 00:00:00+8';"` Role *Role `json:"role" gorm:"ForeignKey:RoleID"` Department *Department `json:"department" gorm:"ForeignKey:DepartmentID"` } func (User) TableName() string { return "sys_user" }