70 lines
2.0 KiB
Go
70 lines
2.0 KiB
Go
package models
|
||
|
||
import (
|
||
"time"
|
||
)
|
||
|
||
type ChatType string
|
||
|
||
const (
|
||
ChatTypePrivate ChatType = "private"
|
||
ChatTypeGroup ChatType = "group"
|
||
)
|
||
|
||
type MemberRole string
|
||
|
||
const (
|
||
MemberRoleMember MemberRole = "member"
|
||
MemberRoleAdmin MemberRole = "admin"
|
||
)
|
||
|
||
type Chat struct {
|
||
ID int64 `json:"id"`
|
||
Type ChatType `json:"type"`
|
||
Title *string `json:"title,omitempty"` // только для групп
|
||
CreatedAt time.Time `json:"created_at"`
|
||
}
|
||
|
||
type ChatMember struct {
|
||
ChatID int64 `json:"chat_id"`
|
||
UserID int64 `json:"user_id"`
|
||
Role MemberRole `json:"role"`
|
||
JoinedAt time.Time `json:"joined_at"`
|
||
}
|
||
|
||
// ChatWithDetails используется для возврата чата с дополнительной информацией
|
||
type ChatWithDetails struct {
|
||
ID int64 `json:"id"`
|
||
Type ChatType `json:"type"`
|
||
Title *string `json:"title,omitempty"`
|
||
CreatedAt time.Time `json:"created_at"`
|
||
LastMessage *Message `json:"last_message,omitempty"`
|
||
UnreadCount int `json:"unread_count,omitempty"`
|
||
ParticipantIDs []int64 `json:"participant_ids,omitempty"`
|
||
}
|
||
|
||
// CreatePrivateChatRequest DTO для создания личного чата
|
||
type CreatePrivateChatRequest struct {
|
||
TargetLogin string `json:"target_login"`
|
||
}
|
||
|
||
// CreateGroupChatRequest DTO для создания группового чата
|
||
type CreateGroupChatRequest struct {
|
||
Title string `json:"title"`
|
||
MemberLogins []string `json:"member_logins"`
|
||
}
|
||
|
||
// AddMembersRequest DTO для добавления участников в группу
|
||
type AddMembersRequest struct {
|
||
UserLogins []string `json:"user_logins"`
|
||
}
|
||
|
||
// UpdateMemberRoleRequest DTO для обновления роли участника
|
||
type UpdateMemberRoleRequest struct {
|
||
Role MemberRole `json:"role"`
|
||
}
|
||
|
||
// UpdateChatTitleRequest DTO для обновления названия чата
|
||
type UpdateChatTitleRequest struct {
|
||
Title string `json:"title"`
|
||
} |