chores: refactor struct and structure project

This commit is contained in:
ericprd
2025-03-05 21:21:44 +08:00
parent 13a8481f22
commit 567e0e32ca
103 changed files with 1125 additions and 731 deletions
+3 -2
View File
@@ -1,13 +1,14 @@
package categoryrepository
import (
"legalgo-BE-go/database"
categorydomain "legalgo-BE-go/internal/domain/category"
"github.com/google/uuid"
)
func (a *accessor) Create(spec categorydomain.CategoryReq) error {
data := categorydomain.Category{
func (a *accessor) CreateModel(spec categorydomain.CategoryReq) error {
data := database.Category{
ID: uuid.NewString(),
Name: spec.Name,
Code: spec.Code,
@@ -1,22 +0,0 @@
package categoryrepository
import (
"legalgo-BE-go/database"
categorydomain "legalgo-BE-go/internal/domain/category"
"github.com/google/uuid"
)
func (a *accessor) CreateModel(spec categorydomain.CategoryReq) error {
data := database.CategoryModel{
ID: uuid.NewString(),
Name: spec.Name,
Code: spec.Code,
}
if err := a.DB.Create(&data).Error; err != nil {
return err
}
return nil
}
+4 -2
View File
@@ -1,8 +1,10 @@
package categoryrepository
import categorydomain "legalgo-BE-go/internal/domain/category"
import (
categorydomain "legalgo-BE-go/internal/domain/category"
)
func (a *accessor) GetAll() ([]categorydomain.Category, error) {
func (a *accessor) GetAllModel() ([]categorydomain.Category, error) {
var categories []categorydomain.Category
if err := a.DB.Find(&categories).Error; err != nil {
@@ -1,15 +0,0 @@
package categoryrepository
import (
"legalgo-BE-go/database"
)
func (a *accessor) GetAllModel() ([]database.CategoryModel, error) {
var categories []database.CategoryModel
if err := a.DB.Find(&categories).Error; err != nil {
return nil, err
}
return categories, nil
}
+3 -3
View File
@@ -1,11 +1,11 @@
package categoryrepository
import (
categorydomain "legalgo-BE-go/internal/domain/category"
"legalgo-BE-go/database"
)
func (a *accessor) GetByIDs(ids []string) ([]categorydomain.Category, error) {
var categories []categorydomain.Category
func (a *accessor) GetByIDs(ids []string) ([]database.Category, error) {
var categories []database.Category
if err := a.DB.Find(&categories, "id IN ?", ids).Error; err != nil {
return nil, err
@@ -1,15 +0,0 @@
package categoryrepository
import (
"legalgo-BE-go/database"
)
func (a *accessor) GetBulks(ids []string) ([]database.CategoryModel, error) {
var categories []database.CategoryModel
if err := a.DB.Find(&categories, "id IN ?", ids).Error; err != nil {
return nil, err
}
return categories, nil
}
+3 -6
View File
@@ -10,14 +10,11 @@ type accessor struct {
}
type Category interface {
Create(categorydomain.CategoryReq) error
CreateModel(categorydomain.CategoryReq) error
Update(categorydomain.Category) error
GetAll() ([]categorydomain.Category, error)
GetAllModel() ([]database.CategoryModel, error)
GetByIDs([]string) ([]categorydomain.Category, error)
GetBulks([]string) ([]database.CategoryModel, error)
GetAllModel() ([]categorydomain.Category, error)
GetByIDs([]string) ([]database.Category, error)
}
func New(
+19
View File
@@ -0,0 +1,19 @@
package categoryrepository
import (
"fmt"
categorydomain "legalgo-BE-go/internal/domain/category"
"gorm.io/gorm/clause"
)
func (a *accessor) Update(spec categorydomain.Category) error {
if err := a.DB.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "id"}},
DoUpdates: clause.AssignmentColumns([]string{"name", "code", "updated_at"}),
}).Save(&spec).Error; err != nil {
return fmt.Errorf("failed to update category: %v", err)
}
return nil
}
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"legalgo-BE-go/database"
)
func (a *accessor) CreateModel(spec database.NewsModel) error {
func (a *accessor) CreateModel(spec database.News) error {
if err := a.db.Create(&spec).Error; err != nil {
return fmt.Errorf("failed to create news: %w", err)
}
+2 -2
View File
@@ -2,8 +2,8 @@ package newsrepository
import "legalgo-BE-go/database"
func (a *accessor) GetAllModel() ([]database.NewsModel, error) {
var news []database.NewsModel
func (a *accessor) GetAllModel() ([]database.News, error) {
var news []database.News
if err := a.db.Preload("Tags").Preload("Categories").Find(&news).Error; err != nil {
return nil, err
+2 -2
View File
@@ -11,9 +11,9 @@ type accessor struct {
type News interface {
GetAll() ([]newsdomain.News, error)
GetAllModel() ([]database.NewsModel, error)
GetAllModel() ([]database.News, error)
Create(*newsdomain.News) error
CreateModel(database.NewsModel) error
CreateModel(database.News) error
}
func New(db *database.DB) News {
+5 -13
View File
@@ -1,8 +1,7 @@
package redisaccessor
import (
"fmt"
"os"
"legalgo-BE-go/config"
"github.com/redis/go-redis/v9"
)
@@ -14,18 +13,11 @@ func Get() *redis.Client {
}
func New() *redis.Client {
var (
username = os.Getenv("REDIS_USERNAME")
addr = fmt.Sprintf("%s:%s", os.Getenv("REDIS_HOST"), os.Getenv("REDIS_PORT"))
password = os.Getenv("REDIS_PASSWORD")
db = 2 // TODO: change later
)
redisClient = redis.NewClient(&redis.Options{
Username: username,
Addr: addr,
Password: password,
DB: db,
Username: config.REDIS_USERNAME,
Addr: config.REDIS_ADDR,
Password: config.REDIS_PASSWORD,
DB: config.REDIS_DB,
})
return redisClient
+7 -5
View File
@@ -1,11 +1,13 @@
package staffrepository
import authdomain "legalgo-BE-go/internal/domain/auth"
import (
staffdomain "legalgo-BE-go/internal/domain/staff"
)
func (ur *StaffRepository) Create(spec *authdomain.Staff) (*authdomain.Staff, error) {
if err := ur.DB.Create(&spec).Error; err != nil {
return nil, err
func (ur *impl) Create(spec staffdomain.Staff) error {
if err := ur.db.Create(&spec).Error; err != nil {
return err
}
return spec, nil
return nil
}
+4 -4
View File
@@ -3,19 +3,19 @@ package staffrepository
import (
"errors"
authdomain "legalgo-BE-go/internal/domain/auth"
staffdomain "legalgo-BE-go/internal/domain/staff"
"gorm.io/gorm"
)
func (sr *StaffRepository) GetStaffByEmail(email string) (*authdomain.Staff, error) {
var staff authdomain.Staff
func (sr *impl) GetStaffByEmail(email string) (*staffdomain.Staff, error) {
var staff staffdomain.Staff
if email == "" {
return nil, errors.New("email is required")
}
if err := sr.DB.First(&staff, "email = ?", email).Error; err != nil {
if err := sr.db.First(&staff, "email = ?", email).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, errors.New("staff not found")
}
+4 -4
View File
@@ -2,19 +2,19 @@ package staffrepository
import (
"errors"
authdomain "legalgo-BE-go/internal/domain/auth"
staffdomain "legalgo-BE-go/internal/domain/staff"
"gorm.io/gorm"
)
func (sr *StaffRepository) GetStaffByID(ID string) (*authdomain.Staff, error) {
var staff authdomain.Staff
func (sr *impl) GetStaffByID(ID string) (*staffdomain.Staff, error) {
var staff staffdomain.Staff
if ID == "" {
return nil, errors.New("id is required")
}
if err := sr.DB.First(&staff, "id = ? ", ID).Error; err != nil {
if err := sr.db.First(&staff, "id = ? ", ID).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, errors.New("staff not found")
}
+10 -10
View File
@@ -2,20 +2,20 @@ package staffrepository
import (
"legalgo-BE-go/database"
authdomain "legalgo-BE-go/internal/domain/auth"
staffdomain "legalgo-BE-go/internal/domain/staff"
)
type StaffRepository struct {
DB *database.DB
type impl struct {
db *database.DB
}
type StaffIntf interface {
GetStaffByEmail(string) (*authdomain.Staff, error)
GetStaffByID(string) (*authdomain.Staff, error)
Create(*authdomain.Staff) (*authdomain.Staff, error)
Update(authdomain.Staff) error
type Staff interface {
GetStaffByEmail(string) (*staffdomain.Staff, error)
GetStaffByID(string) (*staffdomain.Staff, error)
Create(staffdomain.Staff) error
Update(staffdomain.Staff) error
}
func New(db *database.DB) StaffIntf {
return &StaffRepository{db}
func New(db *database.DB) Staff {
return &impl{db}
}
+3 -3
View File
@@ -1,17 +1,17 @@
package staffrepository
import (
authdomain "legalgo-BE-go/internal/domain/auth"
staffdomain "legalgo-BE-go/internal/domain/staff"
"legalgo-BE-go/internal/utilities/utils"
)
func (ur *StaffRepository) Update(spec authdomain.Staff) error {
func (ur *impl) Update(spec staffdomain.Staff) error {
val, err := utils.StructToMap(spec)
if err != nil {
return err
}
if err := ur.DB.Model(&authdomain.Staff{}).Where("id = ?", spec.ID).Updates(val).Error; err != nil {
if err := ur.db.Model(&staffdomain.Staff{}).Where("id = ?", spec.ID).Updates(val).Error; err != nil {
return err
}
+23
View File
@@ -0,0 +1,23 @@
package subscriberepository
import (
"errors"
"fmt"
"legalgo-BE-go/database"
"gorm.io/gorm"
)
func (s *SubsAccs) GetByID(id string) (database.Subscribe, error) {
var subscribe database.Subscribe
if err := s.DB.First(&subscribe, "id = ?", id).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return subscribe, fmt.Errorf("subscribe data not found: %v", err)
}
return subscribe, err
}
return subscribe, nil
}
+2
View File
@@ -8,6 +8,8 @@ type SubsAccs struct {
type SubsIntf interface {
Create(string) (string, error)
GetByID(string) (database.Subscribe, error)
UpdateSubscribeStatus(database.Subscribe) error
}
func New(db *database.DB) SubsIntf {
@@ -0,0 +1,19 @@
package subscriberepository
import (
"fmt"
"legalgo-BE-go/database"
"gorm.io/gorm/clause"
)
func (a *SubsAccs) UpdateSubscribeStatus(spec database.Subscribe) error {
if err := a.DB.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "id"}},
DoUpdates: clause.AssignmentColumns([]string{"status"}),
}).Create(&spec).Error; err != nil {
return fmt.Errorf("failed to update status: %v", err)
}
return nil
}
+3 -3
View File
@@ -2,13 +2,13 @@ package subscribeplanrepository
import (
"errors"
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
"legalgo-BE-go/database"
"gorm.io/gorm"
)
func (s *SubsPlan) GetByID(id string) (subscribeplandomain.SubscribePlan, error) {
var subscribePlan subscribeplandomain.SubscribePlan
func (s *SubsPlan) GetByID(id string) (*database.SubscribePlan, error) {
var subscribePlan *database.SubscribePlan
if err := s.DB.First(&subscribePlan, "id = ? ", id).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
@@ -1,16 +1,16 @@
package subscribeplanrepository
import (
subscribeplandomain "legalgo-BE-go/internal/domain/subscribe_plan"
"legalgo-BE-go/database"
"github.com/google/uuid"
)
func (s *SubsPlan) GetDefault() (subscribeplandomain.SubscribePlan, error) {
var subscribePlan subscribeplandomain.SubscribePlan
func (s *SubsPlan) GetDefault() (*database.SubscribePlan, error) {
var subscribePlan *database.SubscribePlan
if err := s.DB.First(&subscribePlan, "code = ?", "basic").Error; err != nil {
s.DB.Create(&subscribeplandomain.SubscribePlan{
s.DB.Create(&database.SubscribePlan{
ID: uuid.NewString(),
Code: "basic",
Name: "Basic",
+2 -2
View File
@@ -12,8 +12,8 @@ type SubsPlan struct {
type SubsPlanIntf interface {
Create(subscribeplandomain.SubscribePlanReq) error
GetAll() ([]subscribeplandomain.SubscribePlan, error)
GetByID(string) (subscribeplandomain.SubscribePlan, error)
GetDefault() (subscribeplandomain.SubscribePlan, error)
GetByID(string) (*database.SubscribePlan, error)
GetDefault() (*database.SubscribePlan, error)
}
func New(
+1 -1
View File
@@ -8,7 +8,7 @@ import (
)
func (acc *accessor) CreateModel(spec tagdomain.TagReq) error {
data := &database.TagModel{
data := &database.Tag{
ID: uuid.NewString(),
Code: spec.Code,
Name: spec.Name,
+2 -2
View File
@@ -2,8 +2,8 @@ package tagrepository
import "legalgo-BE-go/database"
func (acc *accessor) GetAllModel() ([]database.TagModel, error) {
var tags []database.TagModel
func (acc *accessor) GetAllModel() ([]database.Tag, error) {
var tags []database.Tag
if err := acc.DB.Find(&tags).Error; err != nil {
return nil, err
+2 -2
View File
@@ -2,8 +2,8 @@ package tagrepository
import "legalgo-BE-go/database"
func (a *accessor) GetBulks(ids []string) ([]database.TagModel, error) {
var tags []database.TagModel
func (a *accessor) GetBulks(ids []string) ([]database.Tag, error) {
var tags []database.Tag
if err := a.DB.Find(&tags, "id IN ?", ids).Error; err != nil {
return nil, err
+2 -2
View File
@@ -13,9 +13,9 @@ type TagAccessor interface {
Create(tagdomain.TagReq) error
CreateModel(tagdomain.TagReq) error
GetAll() ([]tagdomain.Tag, error)
GetAllModel() ([]database.TagModel, error)
GetAllModel() ([]database.Tag, error)
GetByIDs([]string) ([]tagdomain.Tag, error)
GetBulks(ids []string) ([]database.TagModel, error)
GetBulks(ids []string) ([]database.Tag, error)
}
func New(
@@ -1,13 +1,13 @@
package userrepository
import (
authdomain "legalgo-BE-go/internal/domain/auth"
userdomain "legalgo-BE-go/internal/domain/user"
)
func (ur *UserRepository) CreateUser(spec *authdomain.User) (*authdomain.User, error) {
func (ur *UserRepository) CreateUser(spec userdomain.User) error {
if err := ur.DB.Create(&spec).Error; err != nil {
return nil, err
return err
}
return spec, nil
return nil
}
@@ -2,14 +2,13 @@ package userrepository
import (
"errors"
authdomain "legalgo-BE-go/internal/domain/auth"
userdomain "legalgo-BE-go/internal/domain/user"
"gorm.io/gorm"
)
func (ur *UserRepository) GetUserByEmail(email string) (*authdomain.User, error) {
var user authdomain.User
func (ur *UserRepository) GetUserByEmail(email string) (*userdomain.User, error) {
var user *userdomain.User
if email == "" {
return nil, errors.New("email is empty")
@@ -22,5 +21,5 @@ func (ur *UserRepository) GetUserByEmail(email string) (*authdomain.User, error)
return nil, err
}
return &user, nil
return user, nil
}
@@ -3,28 +3,22 @@ package userrepository
import (
"errors"
authdomain "legalgo-BE-go/internal/domain/auth"
"gorm.io/gorm"
userdomain "legalgo-BE-go/internal/domain/user"
)
func (ur *UserRepository) GetUserByID(email string) (*authdomain.UserProfile, error) {
var users []authdomain.UserProfile
func (ur *UserRepository) GetUserByID(email string) (*userdomain.User, error) {
var user userdomain.User
if email == "" {
return nil, errors.New("email is empty")
}
if err := ur.DB.Table("users u").
Select("u.email, u.id, s.status as subscribe_status, sp.code as subscribe_plan_code, sp.name as subscribe_plan_name").
Joins("join subscribes s on s.id = u.subscribe_id").
Joins("join subscribe_plans sp on s.subscribe_plan_id = sp.id").
Scan(&users).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, errors.New("user not found")
}
if err := ur.DB.
Preload("Subscribe").
Preload("Subscribe.SubscribePlan").
First(&user, "email = ?", email).Error; err != nil {
return nil, err
}
return &users[0], nil
return &user, nil
}
@@ -2,29 +2,30 @@ package userrepository
import (
"errors"
authdomain "legalgo-BE-go/internal/domain/auth"
"gorm.io/gorm"
userdomain "legalgo-BE-go/internal/domain/user"
)
func (ur *UserRepository) GetUserProfile(email string) (*authdomain.UserProfile, error) {
var users []authdomain.UserProfile
func (ur *UserRepository) GetUserProfile(email string) (*userdomain.UserProfile, error) {
var user *userdomain.User
if email == "" {
return nil, errors.New("email is empty")
}
if err := ur.DB.Table("users u").
Where("email = ?", email).
Select("u.email, u.id, s.status as subscribe_status, sp.code as subscribe_plan_code, sp.name as subscribe_plan_name").
Joins("join subscribes s on s.id = u.subscribe_id").
Joins("join subscribe_plans sp on s.subscribe_plan_id = sp.id").
Scan(&users).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, errors.New("user not found")
}
if err := ur.DB.
Preload("Subscribe").
Preload("Subscribe.SubscribePlan").
First(&user, "email = ?", email).
Error; err != nil {
return nil, err
}
return &users[0], nil
userProfile := &userdomain.UserProfile{
ID: user.ID,
Email: user.Email,
Phone: user.Phone,
Subscribe: user.Subscribe,
}
return userProfile, nil
}
+5 -5
View File
@@ -2,7 +2,7 @@ package userrepository
import (
"legalgo-BE-go/database"
authdomain "legalgo-BE-go/internal/domain/auth"
userdomain "legalgo-BE-go/internal/domain/user"
)
type UserRepository struct {
@@ -10,10 +10,10 @@ type UserRepository struct {
}
type UserIntf interface {
GetUserByEmail(string) (*authdomain.User, error)
GetUserByID(string) (*authdomain.UserProfile, error)
GetUserProfile(string) (*authdomain.UserProfile, error)
CreateUser(*authdomain.User) (*authdomain.User, error)
GetUserByEmail(string) (*userdomain.User, error)
GetUserByID(string) (*userdomain.User, error)
GetUserProfile(string) (*userdomain.UserProfile, error)
CreateUser(userdomain.User) error
}
func New(