1
0
forked from YaBL/app

261 lines
5.6 KiB
Go

package schemas
import (
"time"
"github.com/google/uuid"
"gorm.io/gorm"
)
type Language struct {
ID uuid.UUID
Code string `gorm:"primaryKey;index:,unique"`
ISO *string
}
func (b *Language) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type Genre struct {
ID uuid.UUID
RawTag string `gorm:"index:,unique"`
Tag *string
Name *string
}
func (b *Genre) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type Author struct {
ID uuid.UUID `gorm:"primaryKey;index:,unique;autoIncrement:true"`
Key string `gorm:",unique"`
FirstName string
MiddleName *string
LastName *string
IsBanned *bool
BanReason *string
Books []Book `gorm:"many2many:BookAuthor"`
}
func (b *Author) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type User struct {
ID uuid.UUID `gorm:"primaryKey"`
Username string `gorm:"autoIncrement:false;index:,unique"`
Avatar *string
Name *string
Admin bool
Lang *string
Language *Language `gorm:"foreignKey:Lang"`
LastSeen time.Time
Created time.Time
Password string
OTPToken *string
//Favorites []Book `gorm:"many2many:FavoriteBook;ForeignKey:username"`
BookShelf []ReaderBook
}
func (b *User) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type Translator struct {
ID uuid.UUID `gorm:"primaryKey;index:,unique"`
Key string `gorm:",unique"`
FirstName string
MiddleName *string
LastName *string
}
func (b *Translator) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type Sequence struct {
ID uuid.UUID `gorm:",unique"`
Name string `gorm:"primaryKey;index:,unique"`
}
func (b *Sequence) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type Publisher struct {
ID uuid.UUID `gorm:",unique;autoIncrement:true"`
Name string `gorm:"primaryKey;index:,unique"`
}
func (b *Publisher) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type Book struct {
ID uuid.UUID `gorm:"primaryKey"`
Title string
Authors []Author `gorm:"many2many:BookAuthor;References:ID"`
Lang *string
Language Language `gorm:"foreignKey:Lang"`
Genre *[]Genre `gorm:"many2many:BookGenre;References:RawTag"`
Description *string `gorm:"type:text"`
HasCover bool
IsTranslated bool
Translators *[]Translator `gorm:"many2many:BookTranslator;References:ID"`
SrcLang *string
SrcLanguage Language `gorm:"foreignKey:SrcLang"`
Sequence *string
SequenceID *Sequence `gorm:"foreignKey:Sequence"`
SequenceBook *int
Year *int
Publisher *string
PublisherID *Publisher `gorm:"foreignKey:Publisher"`
Isbn *string
Downloads int `gorm:"default:0"`
Views int `gorm:"default:0"`
SymbolsCount *int
PagesCount *int // pdf
Size int
Hash *string
Bookcase *string
Filename string
// FiletypeID uint
Filetype string
UploadedByID *uint
UploadedBy *User
UploadedAt *time.Time
Collections []Collection `gorm:"many2many:CollectionBook;"`
ExternalCover *string
}
func (b *Book) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
// type Filetype struct {
// ID uint `gorm:"primaryKey"`
// Filetype string `gorm:"uniqueIndex"`
// Name string
// }
type ReaderBook struct {
ID uuid.UUID `gorm:"primaryKey"`
UserID uuid.UUID
BookID uuid.UUID
Book Book `gorm:"foreignKey:BookID"`
Progress float64
LastRead time.Time
}
func (b *ReaderBook) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type Collection struct {
ID uuid.UUID `gorm:"primaryKey"`
Link string `gorm:"uniqueIndex"`
Name string
UserID uuid.UUID
Creator User `gorm:"foreignKey:UserID"`
Books []Book `gorm:"many2many:CollectionBook;"`
Created time.Time
Modified time.Time
}
func (b *Collection) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type Share struct {
ID uuid.UUID `gorm:"primaryKey"`
Token string `gorm:"uniqueIndex"`
CreatedAt time.Time
ExpiredAt *time.Time
BookID *uuid.UUID
Book *Book
UserID uuid.UUID
User User
}
func (b *Share) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type Permission struct {
ID uuid.UUID `gorm:"primaryKey"`
User User `gorm:"foreignKey:ID"`
EditBooks []Book `gorm:"many2many:EditableBook;"`
BooksWhitelist *[]Book `gorm:"many2many:WhitelistedBook;"`
EditCollections []Collection `gorm:"many2many:EditCollection;"`
ViewCollections []Collection `gorm:"many2many:ViewCollection;"`
CanShare bool
CanSearch bool
CanUpload bool
CanCreateCollections bool
}
func (b *Permission) BeforeCreate(tx *gorm.DB) (err error) {
if b.ID == uuid.Nil {
b.ID = uuid.New()
}
return
}
type Settings struct {
LibPath string
ReadOnly bool
MultiUsers bool
}
// таблицы индексы FTS5
type BooksIndex struct {
RowId uint64 `gorm:"column:rowid"`
Title string
}
type AuthorsIndex struct {
RowId uint64 `gorm:"column:rowid"`
Key string
}
type TagsIndex struct {
RowId uint64 `gorm:"column:rowid"`
Name string
}
type SequencesIndex struct {
RowId uint64 `gorm:"column:rowid"`
Name string
}