diff --git a/cmd/.gitkeep b/cmd/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/cmd/api/.gitkeep b/cmd/api/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/cmd/api/main.go b/cmd/api/main.go new file mode 100644 index 0000000..06ab7d0 --- /dev/null +++ b/cmd/api/main.go @@ -0,0 +1 @@ +package main diff --git a/cmd/worker/.gitkeep b/cmd/worker/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/go.mod b/go.mod index 218c3ea..7ecdcdf 100644 --- a/go.mod +++ b/go.mod @@ -3,30 +3,19 @@ module backend go 1.25.0 require ( - github.com/gofiber/fiber/v2 v2.52.9 github.com/google/uuid v1.6.0 gorm.io/driver/postgres v1.6.0 gorm.io/gorm v1.30.2 ) require ( - github.com/andybalholm/brotli v1.1.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgx/v5 v5.6.0 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect - github.com/klauspost/compress v1.17.9 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect - github.com/rivo/uniseg v0.2.0 // indirect - github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasthttp v1.51.0 // indirect - github.com/valyala/tcplisten v1.0.0 // indirect golang.org/x/crypto v0.31.0 // indirect golang.org/x/sync v0.10.0 // indirect - golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.21.0 // indirect ) diff --git a/go.sum b/go.sum index bfbcb6c..dca6894 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,6 @@ -github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= -github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/gofiber/fiber/v2 v2.52.9 h1:YjKl5DOiyP3j0mO61u3NTmK7or8GzzWzCFzkboyP5cw= -github.com/gofiber/fiber/v2 v2.52.9/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= @@ -19,38 +15,17 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= -github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= -github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/domain/entity/.gitkeep b/internal/domain/entity/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/internal/domain/entity/user.go b/internal/domain/entity/user.go deleted file mode 100644 index 5dd7269..0000000 --- a/internal/domain/entity/user.go +++ /dev/null @@ -1,38 +0,0 @@ -package entity - -import ( - "backend/pkg/validate/national" - "backend/pkg/validate/phone" - "time" - - "github.com/google/uuid" -) - -type User struct { - ID uuid.UUID - Name string - LastName string - PhoneNumber string - Email string - PubKey string - NationalID string - BirthDate time.Time // format YYYY-MM-DD in presentation - CreatedAt time.Time - UpdatedAt time.Time -} - -func (u *User) ValidatePhoneNumber(phoneNumber string) error { - ok, err := phone.IsValid(phoneNumber) - if !ok { - return err - } - return nil -} - -func (u *User) ValidateNationalID(ID string) error { - ok, err := national.IsValid(ID) - if !ok { - return err - } - return nil -} diff --git a/internal/domain/user/ops.go b/internal/domain/user/ops.go new file mode 100644 index 0000000..9a10030 --- /dev/null +++ b/internal/domain/user/ops.go @@ -0,0 +1,7 @@ +package user + +// Repo represents the user repository interface. +type Repo interface{} + +// Service represents the user service interface.(UseCases) +type Service interface{} diff --git a/internal/domain/user/types.go b/internal/domain/user/types.go new file mode 100644 index 0000000..fc437ac --- /dev/null +++ b/internal/domain/user/types.go @@ -0,0 +1,18 @@ +package user + +import ( + "time" + + "github.com/google/uuid" +) + +type User struct { + ID uuid.UUID + Name string + LastName string + PhoneNumber string + NationalID string + CreatedAt time.Time + UpdatedAt time.Time + DeletedAt *time.Time +} diff --git a/internal/repository/.gitkeep b/internal/repository/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/internal/repository/storage/.gitkeep b/internal/repository/storage/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/internal/repository/storage/mapper/.gitkeep b/internal/repository/storage/mapper/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/internal/repository/storage/mapper/user.go b/internal/repository/storage/mapper/user.go new file mode 100644 index 0000000..d38fa5c --- /dev/null +++ b/internal/repository/storage/mapper/user.go @@ -0,0 +1,34 @@ +package mapper + +import ( + "backend/internal/domain/user" + "backend/internal/repository/storage/types" +) + +func UserDomain2Storage(u user.User) *types.User { + return &types.User{ + Base: types.Base{ + ID: u.ID, + CreatedAt: u.CreatedAt, + UpdatedAt: u.UpdatedAt, + DeletedAt: u.DeletedAt, + }, + Name: u.Name, + LastName: u.LastName, + Phone: u.PhoneNumber, + NationalID: u.NationalID, + } +} + +func UserStorage2Domain(u types.User) *user.User { + return &user.User{ + ID: u.ID, + Name: u.Name, + LastName: u.LastName, + PhoneNumber: u.Phone, + NationalID: u.NationalID, + CreatedAt: u.CreatedAt, + UpdatedAt: u.UpdatedAt, + DeletedAt: u.DeletedAt, + } +} diff --git a/internal/repository/storage/types/.gitkeep b/internal/repository/storage/types/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/internal/repository/storage/types/base.go b/internal/repository/storage/types/base.go new file mode 100644 index 0000000..0f041cd --- /dev/null +++ b/internal/repository/storage/types/base.go @@ -0,0 +1,14 @@ +package types + +import ( + "time" + + "github.com/google/uuid" +) + +type Base struct { + ID uuid.UUID + CreatedAt time.Time + UpdatedAt time.Time + DeletedAt *time.Time +} diff --git a/internal/repository/storage/types/user.go b/internal/repository/storage/types/user.go new file mode 100644 index 0000000..c043aff --- /dev/null +++ b/internal/repository/storage/types/user.go @@ -0,0 +1,9 @@ +package types + +type User struct { + Base + Name string + LastName string + Phone string + NationalID string +}