Skip to content

Commit 09b3dbd

Browse files
committed
Conform AccountCreationService to MVC pattern
1 parent 72c8eb3 commit 09b3dbd

File tree

7 files changed

+191
-139
lines changed

7 files changed

+191
-139
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package controllers
2+
3+
import (
4+
"context"
5+
"log"
6+
"net/http"
7+
"time"
8+
9+
"account-creation-service/models"
10+
"account-creation-service/services"
11+
"account-creation-service/utils"
12+
13+
"github.com/gin-gonic/gin"
14+
"go.mongodb.org/mongo-driver/bson"
15+
)
16+
17+
func RegisterUser(c *gin.Context) {
18+
var user models.User
19+
20+
if err := c.ShouldBindJSON(&user); err != nil {
21+
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request data"})
22+
return
23+
}
24+
25+
if user.Email == "" || user.Name == "" || user.Password == "" {
26+
log.Printf("Error inserting user into database: %v", user.Type)
27+
c.JSON(http.StatusBadRequest, gin.H{"error": "Email, username, and password are required"})
28+
return
29+
}
30+
31+
var existingUser models.User
32+
userCollection := services.GetUserCollection()
33+
err := userCollection.FindOne(context.TODO(), bson.M{"email": user.Email}).Decode(&existingUser)
34+
if err == nil {
35+
c.JSON(http.StatusBadRequest, gin.H{"error": "Email already exists"})
36+
return
37+
}
38+
39+
hashedPassword, err := utils.HashPassword(user.Password) // Use the new hash function from utils
40+
if err != nil {
41+
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error hashing password"})
42+
return
43+
}
44+
45+
user.Password = hashedPassword
46+
user.CreatedAt = time.Now()
47+
user.Type = "User"
48+
49+
_, err = userCollection.InsertOne(context.TODO(), user)
50+
if err != nil {
51+
log.Printf("Error inserting user into database: %v", err)
52+
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error inserting user into database"})
53+
return
54+
}
55+
56+
c.JSON(http.StatusCreated, gin.H{"message": "User registered successfully"})
57+
}

account-creation-service/go.mod

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,46 @@
1-
module login-service
1+
module account-creation-service
22

33
go 1.23.1
44

55
require (
6-
github.com/bytedance/sonic v1.12.3 // indirect
7-
github.com/bytedance/sonic/loader v0.2.0 // indirect
6+
github.com/gin-gonic/gin v1.10.0
7+
github.com/joho/godotenv v1.5.1
8+
go.mongodb.org/mongo-driver v1.17.0
9+
golang.org/x/crypto v0.27.0
10+
)
11+
12+
require (
13+
github.com/bytedance/sonic v1.11.6 // indirect
14+
github.com/bytedance/sonic/loader v0.1.1 // indirect
815
github.com/cloudwego/base64x v0.1.4 // indirect
916
github.com/cloudwego/iasm v0.2.0 // indirect
10-
github.com/gabriel-vasile/mimetype v1.4.5 // indirect
17+
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
1118
github.com/gin-contrib/sse v0.1.0 // indirect
12-
github.com/gin-gonic/gin v1.10.0 // indirect
1319
github.com/go-playground/locales v0.14.1 // indirect
1420
github.com/go-playground/universal-translator v0.18.1 // indirect
15-
github.com/go-playground/validator/v10 v10.22.1 // indirect
16-
github.com/goccy/go-json v0.10.3 // indirect
21+
github.com/go-playground/validator/v10 v10.20.0 // indirect
22+
github.com/goccy/go-json v0.10.2 // indirect
1723
github.com/golang/snappy v0.0.4 // indirect
18-
github.com/joho/godotenv v1.5.1 // indirect
1924
github.com/json-iterator/go v1.1.12 // indirect
2025
github.com/klauspost/compress v1.13.6 // indirect
21-
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
26+
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
2227
github.com/leodido/go-urn v1.4.0 // indirect
2328
github.com/mattn/go-isatty v0.0.20 // indirect
2429
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
2530
github.com/modern-go/reflect2 v1.0.2 // indirect
2631
github.com/montanaflynn/stats v0.7.1 // indirect
27-
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
32+
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
2833
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
2934
github.com/ugorji/go/codec v1.2.12 // indirect
3035
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
3136
github.com/xdg-go/scram v1.1.2 // indirect
3237
github.com/xdg-go/stringprep v1.0.4 // indirect
3338
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
34-
go.mongodb.org/mongo-driver v1.17.0 // indirect
35-
golang.org/x/arch v0.10.0 // indirect
36-
golang.org/x/crypto v0.27.0 // indirect
37-
golang.org/x/net v0.29.0 // indirect
39+
golang.org/x/arch v0.8.0 // indirect
40+
golang.org/x/net v0.25.0 // indirect
3841
golang.org/x/sync v0.8.0 // indirect
3942
golang.org/x/sys v0.25.0 // indirect
4043
golang.org/x/text v0.18.0 // indirect
41-
google.golang.org/protobuf v1.34.2 // indirect
44+
google.golang.org/protobuf v1.34.1 // indirect
4245
gopkg.in/yaml.v3 v3.0.1 // indirect
4346
)

account-creation-service/go.sum

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
1-
github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU=
2-
github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk=
1+
github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
2+
github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
3+
github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
34
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
4-
github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM=
5-
github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
65
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
76
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
87
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
98
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
109
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
10+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1111
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
12-
github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4=
13-
github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4=
12+
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
13+
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
1414
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
1515
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
1616
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
1717
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
18+
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
19+
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
1820
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
1921
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
2022
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
2123
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
22-
github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA=
23-
github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
24-
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
25-
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
24+
github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8=
25+
github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
26+
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
27+
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
2628
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
2729
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
30+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
31+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
2832
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
2933
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
3034
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
@@ -33,8 +37,8 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm
3337
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
3438
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
3539
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
36-
github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
37-
github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
40+
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
41+
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
3842
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
3943
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
4044
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
@@ -47,17 +51,21 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
4751
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
4852
github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
4953
github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
50-
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
51-
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
54+
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
55+
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
56+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
5257
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5358
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
5459
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
5560
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
61+
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
5662
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
5763
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
5864
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
5965
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
6066
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
67+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
68+
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
6169
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
6270
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
6371
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
@@ -74,8 +82,9 @@ github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfS
7482
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
7583
go.mongodb.org/mongo-driver v1.17.0 h1:Hp4q2MCjvY19ViwimTs00wHi7G4yzxh4/2+nTx8r40k=
7684
go.mongodb.org/mongo-driver v1.17.0/go.mod h1:wwWm/+BuOddhcq3n68LKRmgk2wXzmF6s0SFOa0GINL4=
77-
golang.org/x/arch v0.10.0 h1:S3huipmSclq3PJMNe76NGwkBR504WFkQ5dhzWzP8ZW8=
78-
golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
85+
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
86+
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
87+
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
7988
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
8089
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
8190
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
@@ -84,8 +93,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
8493
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
8594
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
8695
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
87-
golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
88-
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
96+
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
97+
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
8998
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
9099
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
91100
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
@@ -111,8 +120,9 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
111120
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
112121
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
113122
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
114-
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
115-
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
123+
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
124+
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
125+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
116126
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
117127
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
118128
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

account-creation-service/main.go

Lines changed: 20 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,112 +1,28 @@
11
package main
22

33
import (
4-
"context"
5-
"fmt"
6-
"log"
7-
"net/http"
8-
"os"
9-
"time"
4+
"log"
5+
"os"
106

11-
"github.com/gin-gonic/gin"
12-
"go.mongodb.org/mongo-driver/bson"
13-
"go.mongodb.org/mongo-driver/mongo"
14-
"go.mongodb.org/mongo-driver/mongo/options"
15-
"golang.org/x/crypto/bcrypt"
16-
"github.com/joho/godotenv"
7+
"account-creation-service/controllers"
8+
"account-creation-service/services"
9+
"github.com/gin-gonic/gin"
10+
"github.com/joho/godotenv"
1711
)
1812

19-
type User struct {
20-
Email string `json:"email" bson:"email"`
21-
Name string `json:"name" bson:"name"`
22-
Password string `json:"password" bson:"password"`
23-
CreatedAt time.Time `bson:"createdDate"`
24-
Type string `bson:"accountType"`
25-
}
26-
27-
var userCollection *mongo.Collection
28-
29-
func connectDB() *mongo.Client {
30-
// Load env variables
31-
err := godotenv.Load()
32-
if err != nil {
33-
log.Fatalf("Error loading .env file")
34-
}
35-
36-
// get MongoDB URI
37-
mongoURI := os.Getenv("MONGODB_URI")
38-
39-
// Client to the mongodb atlas
40-
clientOptions := options.Client().
41-
ApplyURI(mongoURI)
42-
43-
// Connect to MongoDB
44-
client, err := mongo.Connect(context.TODO(), clientOptions)
45-
if err != nil {
46-
log.Fatalf("MongoDB connection error: %v", err)
47-
}
48-
49-
fmt.Println("MongoDB connected")
50-
return client
51-
}
52-
53-
func hashPassword(password string) (string, error) {
54-
bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
55-
return string(bytes), err
56-
}
57-
58-
func registerUser(c *gin.Context) {
59-
var user User
60-
61-
// If JSON request does not fit into our User struct, status error
62-
if err := c.ShouldBindJSON(&user); err != nil {
63-
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request data"})
64-
return
65-
}
66-
67-
// If any fields are empty, status error
68-
if user.Email == "" || user.Name == "" || user.Password == "" {
69-
log.Printf("Error inserting user into database: %v", user.Type)
70-
c.JSON(http.StatusBadRequest, gin.H{"error": "Email, username, password and type is required"})
71-
return
72-
}
73-
74-
// Check if email is unique
75-
var existingUser User
76-
err := userCollection.FindOne(context.TODO(), bson.M{"email": user.Email}).Decode(&existingUser)
77-
if err == nil {
78-
c.JSON(http.StatusBadRequest, gin.H{"error": "Email already exists"})
79-
return
80-
}
81-
82-
// Hash the password
83-
hashedPassword, err := hashPassword(user.Password)
84-
if err != nil {
85-
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error hashing password"})
86-
return
87-
}
88-
89-
user.Password = hashedPassword
90-
user.CreatedAt = time.Now()
91-
user.Type = "User"
92-
93-
// Insert new account into MongoDB
94-
_, err = userCollection.InsertOne(context.TODO(), user)
95-
if err != nil {
96-
log.Printf("Error inserting user into database: %v", err) // Log the error
97-
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error inserting user into database"})
98-
return
99-
}
100-
101-
c.JSON(http.StatusCreated, gin.H{"message": "User registered successfully"})
102-
}
103-
10413
func main() {
105-
client := connectDB()
106-
defer client.Disconnect(context.TODO())
107-
userCollection = client.Database("Database1").Collection("user_account")
108-
r := gin.Default()
109-
r.POST("/register", registerUser)
110-
port := os.Getenv("PORT")
111-
r.Run(":" + port)
14+
err := godotenv.Load(".env.dev")
15+
if err != nil {
16+
log.Fatalf("Error loading .env.dev file")
17+
}
18+
19+
defer services.DisconnectDB()
20+
21+
r := gin.Default()
22+
r.POST("/register", controllers.RegisterUser)
23+
port := os.Getenv("PORT")
24+
if port == "" {
25+
port = "4040"
26+
}
27+
r.Run(":" + port)
11228
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package models
2+
3+
import "time"
4+
5+
type User struct {
6+
Email string `json:"email" bson:"email"`
7+
Name string `json:"name" bson:"name"`
8+
Password string `json:"password" bson:"password"`
9+
CreatedAt time.Time `bson:"createdDate"`
10+
Type string `bson:"accountType"`
11+
}

0 commit comments

Comments
 (0)