package domain import ( "time" ) // Пользователь type User struct { ID int `json:"id"` Username string `json:"username"` Avatar string `json:"avatar"` Email string `json:"email"` EmailConfirmationToken string `json:"-"` EmailConfirmedAt *time.Time `json:"emailConfirmedAt,omitempty"` Password string `json:"-"` // Пароль не должен возвращаться в ответах CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } // Пост в блоге type Post struct { ID int `json:"id"` Title string `json:"title"` Content string `json:"content"` AuthorID int `json:"authorId"` Author *User `json:"author,omitempty"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } // Комментарий к посту type Comment struct { ID int `json:"id"` Content string `json:"content"` PostID int `json:"postId"` AuthorID int `json:"authorId"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } // Лайк к посту type Like struct { ID int `json:"id"` PostID int `json:"postId"` UserID int `json:"userId"` CreatedAt time.Time `json:"createdAt"` IsRead bool `json:"isRead"` NotifiedAt time.Time `json:"notifiedAt"` } type LikeNotification struct { ID int `json:"id"` LikerID int `json:"-"` // Для внутреннего использования Liker *User `json:"liker"` // Для GraphQL PostID int `json:"-"` // Для внутреннего использования Post *Post `json:"post"` // Для GraphQL IsRead bool `json:"isRead"` CreatedAt time.Time `json:"-"` CreatedAtStr string `json:"createdAt"` // Для GraphQL } // Вспомогательные методы func (n *LikeNotification) SetLiker(user *User) { n.Liker = user n.LikerID = user.ID } func (n *LikeNotification) SetPost(post *Post) { n.Post = post n.PostID = post.ID } func (n *LikeNotification) SetCreatedAtStr() { n.CreatedAtStr = n.CreatedAt.Format(time.RFC3339) } // Токены для аутентификации type Tokens struct { AccessToken string `json:"accessToken"` RefreshToken string `json:"refreshToken"` AccessTokenExpires time.Time `json:"accessTokenExpires"` RefreshTokenExpires time.Time `json:"refreshTokenExpires"` EmailConfirmed bool `json:"emailConfirmed"` } type RegisterInput struct { Username string `json:"username"` Email string `json:"email"` Password string `json:"password"` } type LoginInput struct { Email string `json:"email"` Password string `json:"password"` }