82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package domain
|
|
|
|
import "time"
|
|
|
|
type Role string
|
|
|
|
const (
|
|
RoleOwner Role = "owner"
|
|
RoleAdmin Role = "admin"
|
|
RoleMember Role = "member"
|
|
)
|
|
|
|
type TaskStatus string
|
|
|
|
const (
|
|
StatusTodo TaskStatus = "todo"
|
|
StatusInProgress TaskStatus = "in_progress"
|
|
StatusDone TaskStatus = "done"
|
|
)
|
|
|
|
type User struct {
|
|
ID int64
|
|
Email string
|
|
PasswordHash string
|
|
Name string
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
type Team struct {
|
|
ID int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
CreatedBy int64 `json:"created_by"`
|
|
Role Role `json:"role,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type Task struct {
|
|
ID int64 `json:"id"`
|
|
TeamID int64 `json:"team_id"`
|
|
Title string `json:"title"`
|
|
Description string `json:"description"`
|
|
Status TaskStatus `json:"status"`
|
|
AssigneeID *int64 `json:"assignee_id,omitempty"`
|
|
CreatedBy int64 `json:"created_by"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type TaskHistory struct {
|
|
ID int64 `json:"id"`
|
|
TaskID int64 `json:"task_id"`
|
|
ChangedBy int64 `json:"changed_by"`
|
|
FieldName string `json:"field_name"`
|
|
OldValue *string `json:"old_value,omitempty"`
|
|
NewValue *string `json:"new_value,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type TaskFilter struct {
|
|
TeamID int64
|
|
Status TaskStatus
|
|
AssigneeID *int64
|
|
Page int
|
|
PageSize int
|
|
}
|
|
|
|
type TeamSummary struct {
|
|
TeamID int64 `json:"team_id"`
|
|
TeamName string `json:"team_name"`
|
|
MembersCount int64 `json:"members_count"`
|
|
DoneLast7Days int64 `json:"done_last_7_days"`
|
|
}
|
|
|
|
type TopCreator struct {
|
|
TeamID int64 `json:"team_id"`
|
|
TeamName string `json:"team_name"`
|
|
UserID int64 `json:"user_id"`
|
|
UserName string `json:"user_name"`
|
|
TasksCreated int64 `json:"tasks_created"`
|
|
Rank int64 `json:"rank"`
|
|
}
|