From 0c5aa0becf90a4032a61176ccf460a297ed8bc85 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Mon, 18 Aug 2025 13:02:14 +0700 Subject: [PATCH] feat (user): use case done --- internal/domain/main-entities/user/dto.go | 6 +- .../_use-case-template/crud/tycovar.go | 4 +- internal/use-case/main-use-case/user/case.go | 166 +++++++++++++++++- .../use-case/main-use-case/user/helper.go | 9 +- internal/use-case/main-use-case/user/lib.go | 5 +- .../use-case/main-use-case/user/tycovar.go | 4 +- 6 files changed, 181 insertions(+), 13 deletions(-) diff --git a/internal/domain/main-entities/user/dto.go b/internal/domain/main-entities/user/dto.go index b1335f1d..e47c8aec 100644 --- a/internal/domain/main-entities/user/dto.go +++ b/internal/domain/main-entities/user/dto.go @@ -32,7 +32,7 @@ type Deletedto struct { } type MetaDto struct { - PageNumber int `json:"page_number"` - PageSize int `json:"page_size"` - Count int64 `json:"count"` + PageNumber int `json:"page_number"` + PageSize int `json:"page_size"` + Count int `json:"count"` } diff --git a/internal/use-case/_use-case-template/crud/tycovar.go b/internal/use-case/_use-case-template/crud/tycovar.go index 0a5c27fd..a53e4298 100644 --- a/internal/use-case/_use-case-template/crud/tycovar.go +++ b/internal/use-case/_use-case-template/crud/tycovar.go @@ -26,7 +26,7 @@ var readListPreMw []readListMw // .. var readListPostMw []readListMw // .. var readDetailPreMw []readDetailMw var readDetailPostMw []readDetailMw -var udpatePreMw []readDetailMw -var udpatePostMw []readDetailMw +var updatePreMw []readDetailMw +var updatePostMw []readDetailMw var deletePreMw []readDetailMw var deletePostMw []readDetailMw diff --git a/internal/use-case/main-use-case/user/case.go b/internal/use-case/main-use-case/user/case.go index 779b344c..54cd1d55 100644 --- a/internal/use-case/main-use-case/user/case.go +++ b/internal/use-case/main-use-case/user/case.go @@ -3,6 +3,7 @@ package user import ( "fmt" e "simrs-vx/internal/domain/main-entities/user" + "strconv" dg "github.com/karincake/apem/db-gorm-pg" d "github.com/karincake/dodol" @@ -17,7 +18,7 @@ const source = "user" func Create(input e.CreateDto) (*d.Data, error) { data := e.User{} - setData(input, &data) + setCreate(input, &data) event := pl.Event{ Feature: "Create", @@ -104,3 +105,166 @@ func Create(input e.CreateDto) (*d.Data, error) { Data: data, }, nil } + +func ReadList(input e.ReadListDto) (*d.Data, error) { + var data *e.User + var dataList []e.User + var metaList *e.MetaDto + var err error + err = dg.I.Transaction(func(tx *gorm.DB) error { + for i := range readListPreMw { + if err := readListPreMw[i](&input, data, tx); err != nil { + return nil + } + } + + dataList, metaList, err = ReadListData(input, tx) + if err != nil { + return err + } + + for i := range readListPostMw { + if err := readListPostMw[i](&input, data, tx); err != nil { + return nil + } + } + + return nil + }) + + if err != nil { + return nil, err + } + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "list-data", + "status": "fetched", + "page_number": strconv.Itoa(metaList.PageNumber), + "page_size": strconv.Itoa(metaList.PageSize), + "record_totalCount": strconv.Itoa(metaList.Count), + }, + Data: dataList, + }, nil +} + +func ReadDetail(input e.ReadDetailDto) (*d.Data, error) { + var data *e.User + var err error + err = dg.I.Transaction(func(tx *gorm.DB) error { + for i := range readDetailPreMw { + if err := readDetailPreMw[i](&input, data, tx); err != nil { + return nil + } + } + data, err := ReadDetailData(input, tx) + if err != nil { + return err + } + for i := range readDetailPostMw { + if err := readDetailPostMw[i](&input, data, tx); err != nil { + return nil + } + } + return nil + }) + + if err != nil { + return nil, err + } + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "single-data", + "status": "fetched", + }, + Data: data, + }, nil +} + +func Update(input e.Updatedto) (*d.Data, error) { + rdDto := e.ReadDetailDto{Id: input.Id} + var data *e.User + var err error + err = dg.I.Transaction(func(tx *gorm.DB) error { + data, err = ReadDetailData(rdDto, tx) + if err != nil { + return nil + } + + err = setUpdate(input, data) + if err != nil { + return err + } + for i := range updatePreMw { + if err := updatePreMw[i](&rdDto, data, tx); err != nil { + return nil + } + } + if err := UpdateData(*data, tx); err != nil { + return nil + } + for i := range updatePostMw { + if err := updatePostMw[i](&rdDto, data, tx); err != nil { + return nil + } + } + return nil + }) + + if err != nil { + return nil, err + } + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "single-data", + "status": "updated", + }, + Data: data, + }, nil + +} + +func Delete(input e.Deletedto) (*d.Data, error) { + rdDto := e.ReadDetailDto{Id: input.Id} + var data *e.User + var err error + err = dg.I.Transaction(func(tx *gorm.DB) error { + data, err = ReadDetailData(rdDto, tx) + if err != nil { + return nil + } + for i := range deletePreMw { + if err := deletePreMw[i](&rdDto, data, tx); err != nil { + return nil + } + } + if err := DeleteData(data, tx); err != nil { + return nil + } + for i := range deletePostMw { + if err := deletePostMw[i](&rdDto, data, tx); err != nil { + return nil + } + } + return nil + }) + + if err != nil { + return nil, err + } + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "single-data", + "status": "deleted", + }, + Data: data, + }, nil + +} diff --git a/internal/use-case/main-use-case/user/helper.go b/internal/use-case/main-use-case/user/helper.go index e16c080c..adcf0925 100644 --- a/internal/use-case/main-use-case/user/helper.go +++ b/internal/use-case/main-use-case/user/helper.go @@ -10,7 +10,7 @@ import ( p "simrs-vx/pkg/password" ) -func setData(src e.CreateDto, dst *e.User) error { +func setCreate(src e.CreateDto, dst *e.User) error { pass, err := p.Hash(src.Password) if err != nil { return err @@ -22,3 +22,10 @@ func setData(src e.CreateDto, dst *e.User) error { return nil } + +func setUpdate(src e.Updatedto, dst *e.User) error { + dst.Name = src.CreateDto.Name + dst.Status_Code = src.CreateDto.Status_Code + + return nil +} diff --git a/internal/use-case/main-use-case/user/lib.go b/internal/use-case/main-use-case/user/lib.go index 27bbf221..344c3bf9 100644 --- a/internal/use-case/main-use-case/user/lib.go +++ b/internal/use-case/main-use-case/user/lib.go @@ -52,7 +52,7 @@ func ReadListData(input e.ReadListDto, dbx ...*gorm.DB) ([]e.User, *e.MetaDto, e return nil, nil, err } - meta.Count = count + meta.Count = int(count) meta.PageNumber = pagination.PageNumber meta.PageSize = pagination.PageSize return data, &meta, nil @@ -69,9 +69,6 @@ func ReadDetailData(input e.ReadDetailDto, dbx ...*gorm.DB) (*e.User, error) { } if err := tx.First(&data, input.Id).Error; err != nil { - if err == gorm.ErrRecordNotFound { - return nil, nil - } return nil, err } diff --git a/internal/use-case/main-use-case/user/tycovar.go b/internal/use-case/main-use-case/user/tycovar.go index 6169fba5..e8d564df 100644 --- a/internal/use-case/main-use-case/user/tycovar.go +++ b/internal/use-case/main-use-case/user/tycovar.go @@ -26,7 +26,7 @@ var readListPreMw []readListMw // .. var readListPostMw []readListMw // .. var readDetailPreMw []readDetailMw var readDetailPostMw []readDetailMw -var udpatePreMw []readDetailMw -var udpatePostMw []readDetailMw +var updatePreMw []readDetailMw +var updatePostMw []readDetailMw var deletePreMw []readDetailMw var deletePostMw []readDetailMw