github.com/ngocphuongnb/tetua@v0.0.7-alpha/packages/entrepository/page.go (about) 1 package entrepository 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 8 "github.com/ngocphuongnb/tetua/app/entities" 9 e "github.com/ngocphuongnb/tetua/app/entities" 10 "github.com/ngocphuongnb/tetua/packages/entrepository/ent" 11 "github.com/ngocphuongnb/tetua/packages/entrepository/ent/page" 12 ) 13 14 type PageRepository struct { 15 *BaseRepository[e.Page, ent.Page, *ent.PageQuery, *e.PageFilter] 16 } 17 18 func (p *PageRepository) PublishedPageBySlug(ctx context.Context, slug string) (*entities.Page, error) { 19 page, err := p.Client.Page. 20 Query(). 21 Where(page.DeletedAtIsNil()). 22 Where(page.SlugEQ(slug)). 23 Where(page.DraftEQ(false)). 24 WithFeaturedImage(). 25 Only(ctx) 26 27 if err != nil { 28 return nil, EntError(err, fmt.Sprintf("page not found with slug: %s", slug)) 29 } 30 31 return entPageToPage(page), nil 32 } 33 34 func CreatePageRepository(client *ent.Client) *PageRepository { 35 return &PageRepository{ 36 BaseRepository: &BaseRepository[e.Page, ent.Page, *ent.PageQuery, *e.PageFilter]{ 37 Name: "page", 38 Client: client, 39 ConvertFn: entPageToPage, 40 ByIDFn: func(ctx context.Context, client *ent.Client, id int) (*ent.Page, error) { 41 return client.Page.Query(). 42 Where(page.DeletedAtIsNil()). 43 Where(page.IDEQ(id)). 44 WithFeaturedImage(). 45 Only(ctx) 46 }, 47 DeleteByIDFn: func(ctx context.Context, client *ent.Client, id int) error { 48 return client.Page.DeleteOneID(id).Exec(ctx) 49 }, 50 CreateFn: func(ctx context.Context, client *ent.Client, data *e.Page) (*ent.Page, error) { 51 cq := client.Page.Create(). 52 SetName(data.Name). 53 SetSlug(data.Slug). 54 SetContentHTML(data.ContentHTML). 55 SetContent(data.Content). 56 SetDraft(data.Draft) 57 58 if data.FeaturedImageID != 0 { 59 cq.SetFeaturedImageID(data.FeaturedImageID) 60 } 61 62 return cq.Save(ctx) 63 }, 64 UpdateFn: func(ctx context.Context, client *ent.Client, data *e.Page) (*ent.Page, error) { 65 if data.ID == 0 { 66 return nil, errors.New("page id is required in order to update") 67 } 68 uq := client.Page.UpdateOneID(data.ID). 69 SetName(data.Name). 70 SetSlug(data.Slug). 71 SetContentHTML(data.ContentHTML). 72 SetContent(data.Content). 73 SetDraft(data.Draft) 74 75 if data.FeaturedImageID != 0 { 76 uq.SetFeaturedImageID(data.FeaturedImageID) 77 } 78 79 return uq.Save(ctx) 80 }, 81 QueryFilterFn: func(client *ent.Client, filters ...*e.PageFilter) *ent.PageQuery { 82 query := client.Page.Query().Where(page.DeletedAtIsNil()) 83 publish := "published" 84 85 if len(filters) > 0 { 86 if filters[0].Publish != "" { 87 publish = filters[0].Publish 88 } 89 90 if len(filters[0].ExcludeIDs) > 0 { 91 query = query.Where(page.IDNotIn(filters[0].ExcludeIDs...)) 92 } 93 } 94 95 if publish != "all" { 96 if publish == "published" { 97 query = query.Where(page.DraftEQ(false)) 98 } 99 100 if publish == "draft" { 101 query = query.Where(page.DraftEQ(true)) 102 } 103 } 104 105 return query 106 }, 107 FindFn: func(ctx context.Context, query *ent.PageQuery, filters ...*e.PageFilter) ([]*ent.Page, error) { 108 page, limit, sorts := getPaginateParams(filters[0]) 109 return query. 110 WithFeaturedImage(). 111 Limit(limit). 112 Offset((page - 1) * limit). 113 Order(sorts...). 114 All(ctx) 115 }, 116 }, 117 } 118 }