chore: init monorepo
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
package schemas
|
||||
|
||||
import "time"
|
||||
|
||||
type Language struct {
|
||||
ID uint `gorm:",unique;autoIncrement:true"`
|
||||
Code string `gorm:"primaryKey;index:,unique"`
|
||||
ISO *string
|
||||
}
|
||||
|
||||
type Genre struct {
|
||||
ID uint `gorm:",unique;autoIncrement:true"`
|
||||
RawTag string `gorm:"index:,unique"`
|
||||
Tag *string
|
||||
Name *string
|
||||
}
|
||||
|
||||
type Author struct {
|
||||
ID uint `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"`
|
||||
}
|
||||
|
||||
type User struct {
|
||||
ID uint `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
|
||||
}
|
||||
|
||||
type Translator struct {
|
||||
ID uint `gorm:"primaryKey;index:,unique;autoIncrement:true"`
|
||||
Key string `gorm:",unique"`
|
||||
FirstName string
|
||||
MiddleName *string
|
||||
LastName *string
|
||||
}
|
||||
|
||||
type Sequence struct {
|
||||
ID uint `gorm:",unique;autoIncrement:true"`
|
||||
Name string `gorm:"primaryKey;index:,unique"`
|
||||
}
|
||||
|
||||
type Publisher struct {
|
||||
ID uint `gorm:",unique;autoIncrement:true"`
|
||||
Name string `gorm:"primaryKey;index:,unique"`
|
||||
}
|
||||
|
||||
type Book struct {
|
||||
ID uint64 `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
|
||||
}
|
||||
|
||||
// type Filetype struct {
|
||||
// ID uint `gorm:"primaryKey"`
|
||||
// Filetype string `gorm:"uniqueIndex"`
|
||||
// Name string
|
||||
// }
|
||||
type ReaderBook struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
UserID uint
|
||||
BookID uint
|
||||
Book Book `gorm:"foreignKey:BookID"`
|
||||
Progress float64
|
||||
LastRead time.Time
|
||||
}
|
||||
type Collection struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
Link string `gorm:"uniqueIndex"`
|
||||
Name string
|
||||
UserID uint
|
||||
Creator User `gorm:"foreignKey:UserID"`
|
||||
Books []Book `gorm:"many2many:CollectionBook;"`
|
||||
Created time.Time
|
||||
Modified time.Time
|
||||
}
|
||||
|
||||
type Share struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
Token string `gorm:"uniqueIndex"`
|
||||
CreatedAt time.Time
|
||||
ExpiredAt *time.Time
|
||||
BookID *uint
|
||||
Book *Book
|
||||
UserID uint
|
||||
User User
|
||||
}
|
||||
type Permission struct {
|
||||
ID uint `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
|
||||
}
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user