Skip to content

Commit 383beb8

Browse files
authored
Improved respository and log packages (#39)
1 parent 082aac5 commit 383beb8

File tree

12 files changed

+157
-160
lines changed

12 files changed

+157
-160
lines changed

src/controller/account.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (controller *AccountController) CreateAccountHandler(w http.ResponseWriter,
5555

5656
accountCreated, err := controller.accountRepository.Create(&accountRequest)
5757
if err != nil {
58-
utils.Log(utils.LogLevelError, "Error creating account: %s", err.Error())
58+
utils.LogError("Error creating account: %s", err.Error())
5959
utils.ResponseJSON(w, ErrorResponse{Error: "Error creating account"}, http.StatusInternalServerError)
6060
return
6161
}
@@ -73,7 +73,7 @@ func (controller *AccountController) FetchAccountHandler(w http.ResponseWriter,
7373

7474
account, err := controller.accountRepository.FetchByDomainIdEnvironment(domainId, enviroment)
7575
if err != nil {
76-
utils.Log(utils.LogLevelError, "Error fetching account: %s", err.Error())
76+
utils.LogError("Error fetching account: %s", err.Error())
7777
utils.ResponseJSON(w, ErrorResponse{Error: "Account not found"}, http.StatusNotFound)
7878
return
7979
}
@@ -86,7 +86,7 @@ func (controller *AccountController) FetchAllAccountsByDomainIdHandler(w http.Re
8686

8787
accounts := controller.accountRepository.FetchAllByDomainId(domainId)
8888
if accounts == nil {
89-
utils.Log(utils.LogLevelError, "Not found accounts for domain: %s", domainId)
89+
utils.LogError("Not found accounts for domain: %s", domainId)
9090
utils.ResponseJSON(w, ErrorResponse{Error: "Not found accounts for domain: " + domainId}, http.StatusNotFound)
9191
return
9292
}
@@ -98,7 +98,7 @@ func (controller *AccountController) UpdateAccountHandler(w http.ResponseWriter,
9898
var accountRequest model.Account
9999
err := json.NewDecoder(r.Body).Decode(&accountRequest)
100100
if err != nil {
101-
utils.Log(utils.LogLevelError, "Error updating account: %s", err.Error())
101+
utils.LogError("Error updating account: %s", err.Error())
102102
utils.ResponseJSON(w, ErrorResponse{Error: "Invalid request"}, http.StatusBadRequest)
103103
return
104104
}
@@ -110,7 +110,7 @@ func (controller *AccountController) UpdateAccountHandler(w http.ResponseWriter,
110110

111111
accountUpdated, err := controller.accountRepository.Update(&accountRequest)
112112
if err != nil {
113-
utils.Log(utils.LogLevelError, "Error updating account: %s", err.Error())
113+
utils.LogError("Error updating account: %s", err.Error())
114114
utils.ResponseJSON(w, ErrorResponse{Error: "Error updating account"}, http.StatusInternalServerError)
115115
return
116116
}
@@ -124,7 +124,7 @@ func (controller *AccountController) DeleteAccountHandler(w http.ResponseWriter,
124124

125125
err := controller.accountRepository.DeleteByDomainIdEnvironment(domainId, enviroment)
126126
if err != nil {
127-
utils.Log(utils.LogLevelError, "Error deleting account: %s", err.Error())
127+
utils.LogError("Error deleting account: %s", err.Error())
128128
utils.ResponseJSON(w, ErrorResponse{Error: "Error deleting account: " + err.Error()}, http.StatusInternalServerError)
129129
return
130130
}

src/controller/account_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ func TestDeleteAccountHandler(t *testing.T) {
233233

234234
// Assert
235235
assert.Equal(t, http.StatusInternalServerError, response.Code)
236-
assert.Equal(t, "{\"error\":\"Error deleting account: Account not found for domain.id: not-found\"}", response.Body.String())
236+
assert.Equal(t, "{\"error\":\"Error deleting account: account not found\"}", response.Body.String())
237237
})
238238
}
239239

src/core/handler.go

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type CoreHandler struct {
2525
}
2626

2727
func NewCoreHandler(accountRepository repository.AccountRepository, apiService IAPIService, comparatorService IComparatorService) *CoreHandler {
28-
timeWindow, unitWindow := getTimeWindow(config.GetEnv("HANDLER_WAITING_TIME"))
28+
timeWindow, unitWindow := utils.GetTimeWindow(config.GetEnv("HANDLER_WAITING_TIME"))
2929
waitingTime := time.Duration(timeWindow) * unitWindow
3030

3131
return &CoreHandler{
@@ -64,21 +64,21 @@ func (c *CoreHandler) InitCoreHandlerGoroutine() (int, error) {
6464
}
6565

6666
func (c *CoreHandler) StartAccountHandler(accountId string, gitService IGitService) {
67-
utils.Log(utils.LogLevelInfo, "[%s] Starting account handler", accountId)
67+
utils.LogInfo("[%s] Starting account handler", accountId)
6868

6969
for {
7070
// Refresh account settings
7171
account, _ := c.accountRepository.FetchByAccountId(accountId)
7272

7373
if account == nil {
7474
// Terminate the goroutine (account was deleted)
75-
utils.Log(utils.LogLevelInfo, "[%s] Account was deleted, terminating account handler", accountId)
75+
utils.LogInfo("[%s] Account was deleted, terminating account handler", accountId)
7676
return
7777
}
7878

7979
// Wait for account to be active
8080
if !account.Settings.Active {
81-
utils.Log(utils.LogLevelInfo, "[%s - %s (%s)] Account is not active, waiting for activation",
81+
utils.LogInfo("[%s - %s (%s)] Account is not active, waiting for activation",
8282
accountId, account.Domain.Name, account.Environment)
8383

8484
c.updateDomainStatus(*account, model.StatusPending, "Account was deactivated")
@@ -93,7 +93,7 @@ func (c *CoreHandler) StartAccountHandler(accountId string, gitService IGitServi
9393
repositoryData, err := gitService.GetRepositoryData(account.Environment)
9494

9595
if err != nil {
96-
utils.Log(utils.LogLevelError, "[%s - %s (%s)] Failed to fetch repository data - %s",
96+
utils.LogError("[%s - %s (%s)] Failed to fetch repository data - %s",
9797
accountId, account.Domain.Name, account.Environment, err.Error())
9898

9999
c.updateDomainStatus(*account, model.StatusError, "Failed to fetch repository data - "+err.Error())
@@ -105,7 +105,7 @@ func (c *CoreHandler) StartAccountHandler(accountId string, gitService IGitServi
105105
snapshotVersionPayload, err := c.apiService.FetchSnapshotVersion(account.Domain.ID, account.Environment)
106106

107107
if err != nil {
108-
utils.Log(utils.LogLevelError, "[%s - %s (%s)] Failed to fetch snapshot version - %s",
108+
utils.LogError("[%s - %s (%s)] Failed to fetch snapshot version - %s",
109109
accountId, account.Domain.Name, account.Environment, err.Error())
110110

111111
c.updateDomainStatus(*account, model.StatusError, "Failed to fetch snapshot version - "+err.Error())
@@ -119,13 +119,13 @@ func (c *CoreHandler) StartAccountHandler(accountId string, gitService IGitServi
119119
}
120120

121121
// Wait for the next cycle
122-
timeWindow, unitWindow := getTimeWindow(account.Settings.Window)
122+
timeWindow, unitWindow := utils.GetTimeWindow(account.Settings.Window)
123123
time.Sleep(time.Duration(timeWindow) * unitWindow)
124124
}
125125
}
126126

127127
func (c *CoreHandler) syncUp(account model.Account, repositoryData *model.RepositoryData, gitService IGitService) {
128-
utils.Log(utils.LogLevelInfo, "[%s - %s (%s)] Syncing up", account.ID.Hex(), account.Domain.Name, account.Environment)
128+
utils.LogInfo("[%s - %s (%s)] Syncing up", account.ID.Hex(), account.Domain.Name, account.Environment)
129129

130130
// Update account status: Out of sync
131131
account.Domain.LastCommit = repositoryData.CommitHash
@@ -136,6 +136,9 @@ func (c *CoreHandler) syncUp(account model.Account, repositoryData *model.Reposi
136136
diff, snapshotApi, err := c.checkForChanges(account, repositoryData.Content)
137137

138138
if err != nil {
139+
utils.LogError("[%s - %s (%s)] Failed to check for changes - %s",
140+
account.ID.Hex(), account.Domain.Name, account.Environment, err.Error())
141+
139142
c.updateDomainStatus(account, model.StatusError, "Failed to check for changes - "+err.Error())
140143
return
141144
}
@@ -144,7 +147,7 @@ func (c *CoreHandler) syncUp(account model.Account, repositoryData *model.Reposi
144147
changeSource, account, err := c.applyChanges(snapshotApi, account, repositoryData, diff, gitService)
145148

146149
if err != nil {
147-
utils.Log(utils.LogLevelError, "[%s - %s (%s)] Failed to apply changes [%s] - %s",
150+
utils.LogError("[%s - %s (%s)] Failed to apply changes [%s] - %s",
148151
account.ID.Hex(), account.Domain.Name, account.Environment, changeSource, err.Error())
149152

150153
c.updateDomainStatus(account, model.StatusError, "Failed to apply changes ["+changeSource+"] - "+err.Error())
@@ -181,7 +184,7 @@ func (c *CoreHandler) checkForChanges(account model.Account, content string) (mo
181184

182185
func (c *CoreHandler) applyChanges(snapshotApi model.Snapshot, account model.Account,
183186
repositoryData *model.RepositoryData, diff model.DiffResult, gitService IGitService) (string, model.Account, error) {
184-
utils.Log(utils.LogLevelDebug, "[%s - %s (%s)] SnapshotAPI version: %s - SnapshotRepo version: %s",
187+
utils.LogDebug("[%s - %s (%s)] SnapshotAPI version: %s - SnapshotRepo version: %s",
185188
account.ID.Hex(), account.Domain.Name, account.Environment, fmt.Sprint(snapshotApi.Domain.Version), fmt.Sprint(account.Domain.Version))
186189

187190
err := error(nil)
@@ -192,7 +195,7 @@ func (c *CoreHandler) applyChanges(snapshotApi model.Snapshot, account model.Acc
192195
if c.isRepositoryOutSync(repositoryData, diff) {
193196
account, err = c.applyChangesToRepository(account, snapshotApi, gitService)
194197
} else {
195-
utils.Log(utils.LogLevelInfo, "[%s - %s (%s)] Repository is up to date",
198+
utils.LogInfo("[%s - %s (%s)] Repository is up to date",
196199
account.ID.Hex(), account.Domain.Name, account.Environment)
197200

198201
account.Domain.Version = snapshotApi.Domain.Version
@@ -206,7 +209,7 @@ func (c *CoreHandler) applyChanges(snapshotApi model.Snapshot, account model.Acc
206209
}
207210

208211
func (c *CoreHandler) applyChangesToAPI(account model.Account, repositoryData *model.RepositoryData, diff model.DiffResult) model.Account {
209-
utils.Log(utils.LogLevelInfo, "[%s - %s (%s)] Pushing changes to API", account.ID.Hex(), account.Domain.Name, account.Environment)
212+
utils.LogInfo("[%s - %s (%s)] Pushing changes to API", account.ID.Hex(), account.Domain.Name, account.Environment)
210213

211214
// Removed deleted if force prune is disabled
212215
if !account.Settings.ForcePrune {
@@ -223,7 +226,7 @@ func (c *CoreHandler) applyChangesToAPI(account model.Account, repositoryData *m
223226
}
224227

225228
func (c *CoreHandler) applyChangesToRepository(account model.Account, snapshot model.Snapshot, gitService IGitService) (model.Account, error) {
226-
utils.Log(utils.LogLevelInfo, "[%s - %s (%s)] Pushing changes to repository", account.ID.Hex(), account.Domain.Name, account.Environment)
229+
utils.LogInfo("[%s - %s (%s)] Pushing changes to repository", account.ID.Hex(), account.Domain.Name, account.Environment)
227230

228231
// Remove version from domain
229232
snapshotContent := snapshot
@@ -245,7 +248,7 @@ func (c *CoreHandler) applyChangesToRepository(account model.Account, snapshot m
245248
func (c *CoreHandler) isOutSync(account model.Account, lastCommit string, snapshotVersionPayload string) bool {
246249
snapshotVersion := c.apiService.NewDataFromJson([]byte(snapshotVersionPayload)).Snapshot.Domain.Version
247250

248-
utils.Log(utils.LogLevelDebug, "[%s - %s (%s)] Checking account - Last commit: %s - Domain Version: %d - Snapshot Version: %d",
251+
utils.LogDebug("[%s - %s (%s)] Checking account - Last commit: %s - Domain Version: %d - Snapshot Version: %d",
249252
account.ID.Hex(), account.Domain.Name, account.Environment, account.Domain.LastCommit, account.Domain.Version, snapshotVersion)
250253

251254
return account.Domain.LastCommit == "" || // First sync
@@ -264,8 +267,3 @@ func (c *CoreHandler) updateDomainStatus(account model.Account, status string, m
264267
account.Domain.LastDate = time.Now().Format(time.ANSIC)
265268
c.accountRepository.Update(&account)
266269
}
267-
268-
func getTimeWindow(window string) (int, time.Duration) {
269-
duration, _ := time.ParseDuration(window)
270-
return 1, duration
271-
}

src/db/mongo.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ func InitDb() *mongo.Database {
2424

2525
err = client.Ping(context.Background(), nil)
2626
if err != nil {
27-
utils.Log(utils.LogLevelError, "Error connecting to MongoDB: %s", err.Error())
27+
utils.LogError("Error connecting to MongoDB: %s", err.Error())
2828
}
2929

30-
utils.Log(utils.LogLevelInfo, "Connected to MongoDB!")
30+
utils.LogInfo("Connected to MongoDB!")
3131
return client.Database(config.GetEnv("MONGO_DB"))
3232
}

src/repository/account.go

Lines changed: 49 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -49,59 +49,74 @@ func (repo *AccountRepositoryMongo) Create(account *model.Account) (*model.Accou
4949
return account, nil
5050
}
5151

52-
func (repo *AccountRepositoryMongo) FetchByAccountId(accountId string) (*model.Account, error) {
52+
func (repo *AccountRepositoryMongo) Update(account *model.Account) (*model.Account, error) {
5353
collection, ctx, cancel := getDbContext(repo)
5454
defer cancel()
5555

56-
var account model.Account
57-
objectId, _ := primitive.ObjectIDFromHex(accountId)
58-
filter := bson.M{"_id": objectId}
59-
err := collection.FindOne(ctx, filter).Decode(&account)
56+
filter := primitive.M{domainIdFilter: account.Domain.ID, environmentFilter: account.Environment}
57+
update := getUpdateFields(account)
58+
59+
var updatedAccount model.Account
60+
err := collection.FindOneAndUpdate(ctx, filter, update, options.FindOneAndUpdate().
61+
SetReturnDocument(options.After)).
62+
Decode(&updatedAccount)
63+
6064
if err != nil {
6165
return nil, err
6266
}
6367

64-
return &account, nil
68+
return &updatedAccount, nil
6569
}
6670

67-
func (repo *AccountRepositoryMongo) FetchByDomainIdEnvironment(domainId string, environment string) (*model.Account, error) {
68-
collection, ctx, cancel := getDbContext(repo)
69-
defer cancel()
71+
func (repo *AccountRepositoryMongo) FetchByAccountId(accountId string) (*model.Account, error) {
72+
objectId, _ := primitive.ObjectIDFromHex(accountId)
73+
filter := bson.M{"_id": objectId}
74+
return repo.fetchOne(filter)
75+
}
7076

71-
var account model.Account
77+
func (repo *AccountRepositoryMongo) FetchByDomainIdEnvironment(domainId string, environment string) (*model.Account, error) {
7278
filter := primitive.M{domainIdFilter: domainId, environmentFilter: environment}
73-
err := collection.FindOne(ctx, filter).Decode(&account)
74-
if err != nil {
75-
return nil, err
76-
}
77-
78-
return &account, nil
79+
return repo.fetchOne(filter)
7980
}
8081

8182
func (repo *AccountRepositoryMongo) FetchAllByDomainId(domainId string) []model.Account {
83+
filter := primitive.M{domainIdFilter: domainId}
84+
return repo.fetchMany(filter)
85+
}
86+
87+
func (repo *AccountRepositoryMongo) FetchAllAccounts() []model.Account {
88+
filter := bson.M{}
89+
return repo.fetchMany(filter)
90+
}
91+
92+
func (repo *AccountRepositoryMongo) DeleteByAccountId(accountId string) error {
93+
objectId, _ := primitive.ObjectIDFromHex(accountId)
94+
filter := bson.M{"_id": objectId}
95+
return repo.deleteOne(filter)
96+
}
97+
98+
func (repo *AccountRepositoryMongo) DeleteByDomainIdEnvironment(domainId string, environment string) error {
99+
filter := primitive.M{domainIdFilter: domainId, environmentFilter: environment}
100+
return repo.deleteOne(filter)
101+
}
102+
103+
func (repo *AccountRepositoryMongo) deleteOne(filter primitive.M) error {
82104
collection, ctx, cancel := getDbContext(repo)
83105
defer cancel()
84106

85-
filter := primitive.M{domainIdFilter: domainId}
86-
cursor, _ := collection.Find(ctx, filter)
87-
88-
var accounts []model.Account
89-
for cursor.Next(ctx) {
90-
var account model.Account
91-
err := cursor.Decode(&account)
92-
if err == nil {
93-
accounts = append(accounts, account)
94-
}
107+
result, err := collection.DeleteOne(ctx, filter)
108+
if result.DeletedCount == 0 {
109+
return errors.New("account not found")
95110
}
96111

97-
return accounts
112+
return err
98113
}
99114

100-
func (repo *AccountRepositoryMongo) FetchAllAccounts() []model.Account {
115+
func (repo *AccountRepositoryMongo) fetchMany(filter primitive.M) []model.Account {
101116
collection, ctx, cancel := getDbContext(repo)
102117
defer cancel()
103118

104-
cursor, _ := collection.Find(ctx, primitive.M{})
119+
cursor, _ := collection.Find(ctx, filter)
105120

106121
var accounts []model.Account
107122
for cursor.Next(ctx) {
@@ -115,52 +130,17 @@ func (repo *AccountRepositoryMongo) FetchAllAccounts() []model.Account {
115130
return accounts
116131
}
117132

118-
func (repo *AccountRepositoryMongo) Update(account *model.Account) (*model.Account, error) {
133+
func (repo *AccountRepositoryMongo) fetchOne(filter primitive.M) (*model.Account, error) {
119134
collection, ctx, cancel := getDbContext(repo)
120135
defer cancel()
121136

122-
filter := primitive.M{domainIdFilter: account.Domain.ID, environmentFilter: account.Environment}
123-
update := getUpdateFields(account)
124-
125-
var updatedAccount model.Account
126-
err := collection.FindOneAndUpdate(ctx, filter, update, options.FindOneAndUpdate().
127-
SetReturnDocument(options.After)).
128-
Decode(&updatedAccount)
129-
137+
var account model.Account
138+
err := collection.FindOne(ctx, filter).Decode(&account)
130139
if err != nil {
131140
return nil, err
132141
}
133142

134-
return &updatedAccount, nil
135-
}
136-
137-
func (repo *AccountRepositoryMongo) DeleteByAccountId(accountId string) error {
138-
collection, ctx, cancel := getDbContext(repo)
139-
defer cancel()
140-
141-
objectId, _ := primitive.ObjectIDFromHex(accountId)
142-
filter := bson.M{"_id": objectId}
143-
result, err := collection.DeleteOne(ctx, filter)
144-
145-
if result.DeletedCount == 0 {
146-
return errors.New("Account not found for id: " + accountId)
147-
}
148-
149-
return err
150-
}
151-
152-
func (repo *AccountRepositoryMongo) DeleteByDomainIdEnvironment(domainId string, environment string) error {
153-
collection, ctx, cancel := getDbContext(repo)
154-
defer cancel()
155-
156-
filter := primitive.M{domainIdFilter: domainId, environmentFilter: environment}
157-
result, err := collection.DeleteOne(ctx, filter)
158-
159-
if result.DeletedCount == 0 {
160-
return errors.New("Account not found for domain.id: " + domainId)
161-
}
162-
163-
return err
143+
return &account, nil
164144
}
165145

166146
func getDbContext(repo *AccountRepositoryMongo) (*mongo.Collection, context.Context, context.CancelFunc) {
@@ -182,7 +162,7 @@ func registerAccountRepositoryValidators(db *mongo.Database) {
182162

183163
_, err := collection.Indexes().CreateOne(context.Background(), indexModel)
184164
if err != nil {
185-
utils.Log(utils.LogLevelError, "Error creating index for account (environment, domain.id): %s", err.Error())
165+
utils.LogError("Error creating index for account (environment, domain.id): %s", err.Error())
186166
}
187167
}
188168

0 commit comments

Comments
 (0)