tercul-backend/internal/adapters/graphql/model/models_gen.go
google-labs-jules[bot] 1c4dcbcf99 Refactor: Introduce service layer for application logic
This change introduces a service layer to encapsulate the business logic
for each domain aggregate. This will make the code more modular,
testable, and easier to maintain.

The following services have been created:
- author
- bookmark
- category
- collection
- comment
- like
- tag
- translation
- user

The main Application struct has been updated to use these new services.
The integration test suite has also been updated to use the new
Application struct and services.

This is a work in progress. The next step is to fix the compilation
errors and then refactor the resolvers to use the new services.
2025-09-09 02:28:25 +00:00

678 lines
22 KiB
Go

// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package model
import (
"bytes"
"fmt"
"io"
"strconv"
)
type Address struct {
ID string `json:"id"`
Street string `json:"street"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
City *City `json:"city,omitempty"`
Country *Country `json:"country,omitempty"`
Authors []*Author `json:"authors,omitempty"`
Users []*User `json:"users,omitempty"`
}
type AuthPayload struct {
Token string `json:"token"`
User *User `json:"user"`
}
type Author struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
Biography *string `json:"biography,omitempty"`
BirthDate *string `json:"birthDate,omitempty"`
DeathDate *string `json:"deathDate,omitempty"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Works []*Work `json:"works,omitempty"`
Books []*Book `json:"books,omitempty"`
Country *Country `json:"country,omitempty"`
City *City `json:"city,omitempty"`
Place *Place `json:"place,omitempty"`
Address *Address `json:"address,omitempty"`
CopyrightClaims []*CopyrightClaim `json:"copyrightClaims,omitempty"`
Copyright *Copyright `json:"copyright,omitempty"`
}
type AuthorInput struct {
Name string `json:"name"`
Language string `json:"language"`
Biography *string `json:"biography,omitempty"`
BirthDate *string `json:"birthDate,omitempty"`
DeathDate *string `json:"deathDate,omitempty"`
CountryID *string `json:"countryId,omitempty"`
CityID *string `json:"cityId,omitempty"`
PlaceID *string `json:"placeId,omitempty"`
AddressID *string `json:"addressId,omitempty"`
}
type Book struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Works []*Work `json:"works,omitempty"`
Stats *BookStats `json:"stats,omitempty"`
Copyright *Copyright `json:"copyright,omitempty"`
CopyrightClaims []*CopyrightClaim `json:"copyrightClaims,omitempty"`
}
type BookStats struct {
ID string `json:"id"`
Sales int32 `json:"sales"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Book *Book `json:"book"`
}
type Bookmark struct {
ID string `json:"id"`
Name *string `json:"name,omitempty"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
User *User `json:"user"`
Work *Work `json:"work"`
}
type BookmarkInput struct {
Name *string `json:"name,omitempty"`
WorkID string `json:"workId"`
}
type Category struct {
ID string `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Works []*Work `json:"works,omitempty"`
}
type City struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Country *Country `json:"country,omitempty"`
Authors []*Author `json:"authors,omitempty"`
Users []*User `json:"users,omitempty"`
}
type Collection struct {
ID string `json:"id"`
Name string `json:"name"`
Description *string `json:"description,omitempty"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Works []*Work `json:"works,omitempty"`
User *User `json:"user,omitempty"`
Stats *CollectionStats `json:"stats,omitempty"`
}
type CollectionInput struct {
Name string `json:"name"`
Description *string `json:"description,omitempty"`
WorkIds []string `json:"workIds,omitempty"`
}
type CollectionStats struct {
ID string `json:"id"`
Items int32 `json:"items"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Collection *Collection `json:"collection"`
}
type Comment struct {
ID string `json:"id"`
Text string `json:"text"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
User *User `json:"user"`
Work *Work `json:"work,omitempty"`
Translation *Translation `json:"translation,omitempty"`
LineNumber *int32 `json:"lineNumber,omitempty"`
ParentComment *Comment `json:"parentComment,omitempty"`
ChildComments []*Comment `json:"childComments,omitempty"`
Likes []*Like `json:"likes,omitempty"`
}
type CommentInput struct {
Text string `json:"text"`
WorkID *string `json:"workId,omitempty"`
TranslationID *string `json:"translationId,omitempty"`
LineNumber *int32 `json:"lineNumber,omitempty"`
ParentCommentID *string `json:"parentCommentId,omitempty"`
}
type Concept struct {
ID string `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Works []*Work `json:"works,omitempty"`
Words []*Word `json:"words,omitempty"`
}
type Contribution struct {
ID string `json:"id"`
Name string `json:"name"`
Status ContributionStatus `json:"status"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
User *User `json:"user"`
Work *Work `json:"work,omitempty"`
Translation *Translation `json:"translation,omitempty"`
}
type ContributionInput struct {
Name string `json:"name"`
WorkID *string `json:"workId,omitempty"`
TranslationID *string `json:"translationId,omitempty"`
Status *ContributionStatus `json:"status,omitempty"`
}
type Copyright struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
WorkOwner *Author `json:"workOwner,omitempty"`
Works []*Work `json:"works,omitempty"`
Translations []*Translation `json:"translations,omitempty"`
Books []*Book `json:"books,omitempty"`
Sources []*Source `json:"sources,omitempty"`
}
type CopyrightClaim struct {
ID string `json:"id"`
Details string `json:"details"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Work *Work `json:"work,omitempty"`
Translation *Translation `json:"translation,omitempty"`
Book *Book `json:"book,omitempty"`
Source *Source `json:"source,omitempty"`
Author *Author `json:"author,omitempty"`
User *User `json:"user,omitempty"`
}
type Country struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Authors []*Author `json:"authors,omitempty"`
Users []*User `json:"users,omitempty"`
}
type Edge struct {
ID string `json:"id"`
SourceTable string `json:"sourceTable"`
SourceID string `json:"sourceId"`
TargetTable string `json:"targetTable"`
TargetID string `json:"targetId"`
Relation string `json:"relation"`
Language *string `json:"language,omitempty"`
Extra *string `json:"extra,omitempty"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
type Emotion struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
User *User `json:"user,omitempty"`
Work *Work `json:"work,omitempty"`
Collection *Collection `json:"collection,omitempty"`
}
type Like struct {
ID string `json:"id"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
User *User `json:"user"`
Work *Work `json:"work,omitempty"`
Translation *Translation `json:"translation,omitempty"`
Comment *Comment `json:"comment,omitempty"`
}
type LikeInput struct {
WorkID *string `json:"workId,omitempty"`
TranslationID *string `json:"translationId,omitempty"`
CommentID *string `json:"commentId,omitempty"`
}
type LinguisticLayer struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Works []*Work `json:"works,omitempty"`
}
type LoginInput struct {
Email string `json:"email"`
Password string `json:"password"`
}
type Mood struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Works []*Work `json:"works,omitempty"`
}
type Mutation struct {
}
type Place struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
City *City `json:"city,omitempty"`
Country *Country `json:"country,omitempty"`
Authors []*Author `json:"authors,omitempty"`
}
type PoeticAnalysis struct {
ID string `json:"id"`
Structure string `json:"structure"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Work *Work `json:"work"`
}
type Query struct {
}
type ReadabilityScore struct {
ID string `json:"id"`
Score float64 `json:"score"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Work *Work `json:"work,omitempty"`
}
type RegisterInput struct {
Username string `json:"username"`
Email string `json:"email"`
Password string `json:"password"`
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
}
type SearchFilters struct {
Languages []string `json:"languages,omitempty"`
Categories []string `json:"categories,omitempty"`
Tags []string `json:"tags,omitempty"`
Authors []string `json:"authors,omitempty"`
DateFrom *string `json:"dateFrom,omitempty"`
DateTo *string `json:"dateTo,omitempty"`
}
type SearchResults struct {
Works []*Work `json:"works"`
Translations []*Translation `json:"translations"`
Authors []*Author `json:"authors"`
Total int32 `json:"total"`
}
type Source struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Copyright *Copyright `json:"copyright,omitempty"`
CopyrightClaims []*CopyrightClaim `json:"copyrightClaims,omitempty"`
Works []*Work `json:"works,omitempty"`
}
type Tag struct {
ID string `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Works []*Work `json:"works,omitempty"`
}
type TextMetadata struct {
ID string `json:"id"`
Analysis string `json:"analysis"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Work *Work `json:"work"`
}
type TopicCluster struct {
ID string `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Works []*Work `json:"works,omitempty"`
}
type Translation struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
Content *string `json:"content,omitempty"`
WorkID string `json:"workId"`
Work *Work `json:"work"`
Translator *User `json:"translator,omitempty"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Stats *TranslationStats `json:"stats,omitempty"`
Copyright *Copyright `json:"copyright,omitempty"`
CopyrightClaims []*CopyrightClaim `json:"copyrightClaims,omitempty"`
Comments []*Comment `json:"comments,omitempty"`
Likes []*Like `json:"likes,omitempty"`
}
type TranslationInput struct {
Name string `json:"name"`
Language string `json:"language"`
Content *string `json:"content,omitempty"`
WorkID string `json:"workId"`
}
type TranslationStats struct {
ID string `json:"id"`
Views *int32 `json:"views,omitempty"`
Likes *int32 `json:"likes,omitempty"`
Comments *int32 `json:"comments,omitempty"`
Shares *int32 `json:"shares,omitempty"`
ReadingTime *int32 `json:"readingTime,omitempty"`
Sentiment *float64 `json:"sentiment,omitempty"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Translation *Translation `json:"translation"`
}
type User struct {
ID string `json:"id"`
Username string `json:"username"`
Email string `json:"email"`
FirstName *string `json:"firstName,omitempty"`
LastName *string `json:"lastName,omitempty"`
DisplayName *string `json:"displayName,omitempty"`
Bio *string `json:"bio,omitempty"`
AvatarURL *string `json:"avatarUrl,omitempty"`
Role UserRole `json:"role"`
LastLoginAt *string `json:"lastLoginAt,omitempty"`
Verified bool `json:"verified"`
Active bool `json:"active"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Translations []*Translation `json:"translations,omitempty"`
Comments []*Comment `json:"comments,omitempty"`
Likes []*Like `json:"likes,omitempty"`
Bookmarks []*Bookmark `json:"bookmarks,omitempty"`
Collections []*Collection `json:"collections,omitempty"`
Contributions []*Contribution `json:"contributions,omitempty"`
Country *Country `json:"country,omitempty"`
City *City `json:"city,omitempty"`
Address *Address `json:"address,omitempty"`
Stats *UserStats `json:"stats,omitempty"`
}
type UserInput struct {
Username *string `json:"username,omitempty"`
Email *string `json:"email,omitempty"`
Password *string `json:"password,omitempty"`
FirstName *string `json:"firstName,omitempty"`
LastName *string `json:"lastName,omitempty"`
DisplayName *string `json:"displayName,omitempty"`
Bio *string `json:"bio,omitempty"`
AvatarURL *string `json:"avatarUrl,omitempty"`
Role *UserRole `json:"role,omitempty"`
Verified *bool `json:"verified,omitempty"`
Active *bool `json:"active,omitempty"`
CountryID *string `json:"countryId,omitempty"`
CityID *string `json:"cityId,omitempty"`
AddressID *string `json:"addressId,omitempty"`
}
type UserProfile struct {
ID string `json:"id"`
UserID string `json:"userId"`
User *User `json:"user"`
PhoneNumber *string `json:"phoneNumber,omitempty"`
Website *string `json:"website,omitempty"`
Twitter *string `json:"twitter,omitempty"`
Facebook *string `json:"facebook,omitempty"`
LinkedIn *string `json:"linkedIn,omitempty"`
Github *string `json:"github,omitempty"`
Preferences *string `json:"preferences,omitempty"`
Settings *string `json:"settings,omitempty"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
type UserStats struct {
ID string `json:"id"`
Activity int32 `json:"activity"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
User *User `json:"user"`
}
type Word struct {
ID string `json:"id"`
Name string `json:"name"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Concept *Concept `json:"concept,omitempty"`
Works []*Work `json:"works,omitempty"`
}
type Work struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
Content *string `json:"content,omitempty"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Translations []*Translation `json:"translations,omitempty"`
Authors []*Author `json:"authors,omitempty"`
Tags []*Tag `json:"tags,omitempty"`
Categories []*Category `json:"categories,omitempty"`
ReadabilityScore *ReadabilityScore `json:"readabilityScore,omitempty"`
WritingStyle *WritingStyle `json:"writingStyle,omitempty"`
Emotions []*Emotion `json:"emotions,omitempty"`
TopicClusters []*TopicCluster `json:"topicClusters,omitempty"`
Moods []*Mood `json:"moods,omitempty"`
Concepts []*Concept `json:"concepts,omitempty"`
LinguisticLayers []*LinguisticLayer `json:"linguisticLayers,omitempty"`
Stats *WorkStats `json:"stats,omitempty"`
TextMetadata *TextMetadata `json:"textMetadata,omitempty"`
PoeticAnalysis *PoeticAnalysis `json:"poeticAnalysis,omitempty"`
Copyright *Copyright `json:"copyright,omitempty"`
CopyrightClaims []*CopyrightClaim `json:"copyrightClaims,omitempty"`
Collections []*Collection `json:"collections,omitempty"`
Comments []*Comment `json:"comments,omitempty"`
Likes []*Like `json:"likes,omitempty"`
Bookmarks []*Bookmark `json:"bookmarks,omitempty"`
}
type WorkInput struct {
Name string `json:"name"`
Language string `json:"language"`
Content *string `json:"content,omitempty"`
AuthorIds []string `json:"authorIds,omitempty"`
TagIds []string `json:"tagIds,omitempty"`
CategoryIds []string `json:"categoryIds,omitempty"`
}
type WorkStats struct {
ID string `json:"id"`
Views *int32 `json:"views,omitempty"`
Likes *int32 `json:"likes,omitempty"`
Comments *int32 `json:"comments,omitempty"`
Bookmarks *int32 `json:"bookmarks,omitempty"`
Shares *int32 `json:"shares,omitempty"`
TranslationCount *int32 `json:"translationCount,omitempty"`
ReadingTime *int32 `json:"readingTime,omitempty"`
Complexity *float64 `json:"complexity,omitempty"`
Sentiment *float64 `json:"sentiment,omitempty"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Work *Work `json:"work"`
}
type WritingStyle struct {
ID string `json:"id"`
Name string `json:"name"`
Language string `json:"language"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Work *Work `json:"work,omitempty"`
}
type ContributionStatus string
const (
ContributionStatusDraft ContributionStatus = "DRAFT"
ContributionStatusSubmitted ContributionStatus = "SUBMITTED"
ContributionStatusUnderReview ContributionStatus = "UNDER_REVIEW"
ContributionStatusApproved ContributionStatus = "APPROVED"
ContributionStatusRejected ContributionStatus = "REJECTED"
)
var AllContributionStatus = []ContributionStatus{
ContributionStatusDraft,
ContributionStatusSubmitted,
ContributionStatusUnderReview,
ContributionStatusApproved,
ContributionStatusRejected,
}
func (e ContributionStatus) IsValid() bool {
switch e {
case ContributionStatusDraft, ContributionStatusSubmitted, ContributionStatusUnderReview, ContributionStatusApproved, ContributionStatusRejected:
return true
}
return false
}
func (e ContributionStatus) String() string {
return string(e)
}
func (e *ContributionStatus) UnmarshalGQL(v any) error {
str, ok := v.(string)
if !ok {
return fmt.Errorf("enums must be strings")
}
*e = ContributionStatus(str)
if !e.IsValid() {
return fmt.Errorf("%s is not a valid ContributionStatus", str)
}
return nil
}
func (e ContributionStatus) MarshalGQL(w io.Writer) {
fmt.Fprint(w, strconv.Quote(e.String()))
}
func (e *ContributionStatus) UnmarshalJSON(b []byte) error {
s, err := strconv.Unquote(string(b))
if err != nil {
return err
}
return e.UnmarshalGQL(s)
}
func (e ContributionStatus) MarshalJSON() ([]byte, error) {
var buf bytes.Buffer
e.MarshalGQL(&buf)
return buf.Bytes(), nil
}
type UserRole string
const (
UserRoleReader UserRole = "READER"
UserRoleContributor UserRole = "CONTRIBUTOR"
UserRoleReviewer UserRole = "REVIEWER"
UserRoleEditor UserRole = "EDITOR"
UserRoleAdmin UserRole = "ADMIN"
)
var AllUserRole = []UserRole{
UserRoleReader,
UserRoleContributor,
UserRoleReviewer,
UserRoleEditor,
UserRoleAdmin,
}
func (e UserRole) IsValid() bool {
switch e {
case UserRoleReader, UserRoleContributor, UserRoleReviewer, UserRoleEditor, UserRoleAdmin:
return true
}
return false
}
func (e UserRole) String() string {
return string(e)
}
func (e *UserRole) UnmarshalGQL(v any) error {
str, ok := v.(string)
if !ok {
return fmt.Errorf("enums must be strings")
}
*e = UserRole(str)
if !e.IsValid() {
return fmt.Errorf("%s is not a valid UserRole", str)
}
return nil
}
func (e UserRole) MarshalGQL(w io.Writer) {
fmt.Fprint(w, strconv.Quote(e.String()))
}
func (e *UserRole) UnmarshalJSON(b []byte) error {
s, err := strconv.Unquote(string(b))
if err != nil {
return err
}
return e.UnmarshalGQL(s)
}
func (e UserRole) MarshalJSON() ([]byte, error) {
var buf bytes.Buffer
e.MarshalGQL(&buf)
return buf.Bytes(), nil
}