MobileMkch/models/models.go
2025-08-05 20:08:15 +03:00

118 lines
2.5 KiB
Go

package models
import (
"strings"
"time"
)
type Board struct {
Code string `json:"code"`
Description string `json:"description"`
}
type Thread struct {
ID int `json:"id"`
Title string `json:"title"`
Text string `json:"text"`
Creation string `json:"creation"`
Board string `json:"board"`
Rating *int `json:"rating,omitempty"`
Pinned *bool `json:"pinned,omitempty"`
Files []string `json:"files"`
}
func (t *Thread) GetCreationTime() time.Time {
if parsed, err := time.Parse(time.RFC3339, t.Creation); err == nil {
return parsed
}
return time.Now()
}
func (t *Thread) GetRatingValue() int {
if t.Rating != nil {
return *t.Rating
}
return 0
}
func (t *Thread) IsPinned() bool {
return t.Pinned != nil && *t.Pinned
}
type ThreadDetail struct {
ID int `json:"id"`
Creation string `json:"creation"`
Title string `json:"title"`
Text string `json:"text"`
Board string `json:"board"`
Files []string `json:"files"`
}
func (td *ThreadDetail) GetCreationTime() time.Time {
if parsed, err := time.Parse(time.RFC3339, td.Creation); err == nil {
return parsed
}
return time.Now()
}
type Comment struct {
ID int `json:"id"`
Text string `json:"text"`
Creation string `json:"creation"`
Files []string `json:"files"`
}
func (c *Comment) GetCreationTime() time.Time {
if parsed, err := time.Parse(time.RFC3339, c.Creation); err == nil {
return parsed
}
return time.Now()
}
func (c *Comment) FormatText() string {
text := c.Text
// Простая замена #id на >>id для отображения
// TODO: можно добавить более сложную обработку ссылок
return strings.ReplaceAll(text, "#", ">>")
}
type FileInfo struct {
URL string
Filename string
IsImage bool
IsVideo bool
}
func GetFileInfo(filePath string) FileInfo {
filename := filePath
if idx := strings.LastIndex(filePath, "/"); idx != -1 {
filename = filePath[idx+1:]
}
ext := strings.ToLower(filePath)
isImage := strings.HasSuffix(ext, ".jpg") ||
strings.HasSuffix(ext, ".jpeg") ||
strings.HasSuffix(ext, ".png") ||
strings.HasSuffix(ext, ".gif") ||
strings.HasSuffix(ext, ".webp")
isVideo := strings.HasSuffix(ext, ".mp4") ||
strings.HasSuffix(ext, ".webm")
return FileInfo{
URL: "https://mkch.pooziqo.xyz" + filePath,
Filename: filename,
IsImage: isImage,
IsVideo: isVideo,
}
}
type APIError struct {
Message string
Code int
}
func (e APIError) Error() string {
return e.Message
}