Spaces:
Runtime error
Runtime error
| package entity | |
| import ( | |
| "time" | |
| "github.com/google/uuid" | |
| "gorm.io/gorm" | |
| ) | |
| type User struct { | |
| ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"` | |
| Username string `gorm:"type:varchar(100);not null;unique" json:"username"` | |
| Fullname string `gorm:"column:name;type:varchar(100);not null" json:"fullname"` | |
| Email string `gorm:"type:varchar(100);not null;unique" json:"email"` | |
| Role string `gorm:"type:varchar(20);not null;default:'user'" json:"role"` // user, admin, worker | |
| Password string `gorm:"type:varchar(255);not null" json:"-"` | |
| Verified bool `gorm:"default:false" json:"verified"` | |
| TotalXP int `gorm:"default:0" json:"total_xp"` | |
| Level int `gorm:"default:1" json:"level"` | |
| CreatedAt time.Time `json:"created_at"` | |
| UpdatedAt time.Time `json:"updated_at"` | |
| DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"` | |
| } | |
| type Report struct { | |
| ID string `gorm:"type:text;primary_key" json:"id"` | |
| UserID uuid.UUID `gorm:"type:uuid" json:"user_id"` | |
| WorkerID *uuid.UUID `gorm:"type:uuid" json:"worker_id"` | |
| Longitude float64 `gorm:"type:numeric" json:"longitude"` | |
| Latitude float64 `gorm:"type:numeric" json:"latitude"` | |
| RoadName string `gorm:"column:road_name;type:text" json:"road_name"` | |
| BeforeImageURL string `gorm:"column:before_image_url;type:text" json:"before_image_url"` | |
| AfterImageURL string `gorm:"column:after_image_url;type:text" json:"after_image_url"` | |
| Description string `gorm:"type:text" json:"description"` | |
| DestructClass string `gorm:"column:destruct_class;type:text" json:"destruct_class"` | |
| LocationScore float64 `gorm:"column:location_score;type:numeric" json:"location_score"` | |
| TotalScore float64 `gorm:"column:total_score;type:numeric" json:"total_score"` | |
| Status string `gorm:"type:text" json:"status"` | |
| AdminNotes string `gorm:"column:admin_notes;type:text" json:"admin_notes"` | |
| Deadline *time.Time `gorm:"column:deadline;type:timestamp" json:"deadline"` | |
| CreatedAt time.Time `json:"created_at"` | |
| DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"` | |
| } | |
| type Achievement struct { | |
| ID string `gorm:"type:text;primary_key" json:"id"` | |
| Name string `gorm:"type:varchar(100);not null" json:"name"` | |
| Description string `gorm:"type:text" json:"description"` | |
| BadgeURL string `gorm:"column:badge_url;type:text" json:"badge_url"` | |
| Category string `gorm:"type:varchar(50)" json:"category"` // milestone, quality, explorer, streak | |
| XPReward int `gorm:"column:xp_reward;default:0" json:"xp_reward"` | |
| } | |
| type UserAchievement struct { | |
| ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"` | |
| UserID uuid.UUID `gorm:"type:uuid;not null" json:"user_id"` | |
| AchievementID string `gorm:"type:text;not null" json:"achievement_id"` | |
| Achievement Achievement `gorm:"foreignKey:AchievementID" json:"achievement"` | |
| UnlockedAt time.Time `json:"unlocked_at"` | |
| } | |
| // Notification represents a user notification | |
| type Notification struct { | |
| ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"` | |
| UserID uuid.UUID `gorm:"type:uuid;not null;index" json:"user_id"` | |
| Type string `gorm:"type:varchar(50);not null" json:"type"` | |
| Title string `gorm:"type:varchar(200);not null" json:"title"` | |
| Message string `gorm:"type:text;not null" json:"message"` | |
| Data string `gorm:"type:text" json:"data"` | |
| IsRead bool `gorm:"default:false" json:"is_read"` | |
| CreatedAt time.Time `json:"created_at"` | |
| DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` | |
| } | |