Skip to content

Commit 12673ed

Browse files
author
Arturo
committed
Added logic for Ticket Repo
1 parent a826309 commit 12673ed

File tree

3 files changed

+117
-15
lines changed

3 files changed

+117
-15
lines changed

main.go

+49-4
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,65 @@ package main
22

33
import (
44
"issue-tracker/config"
5+
"issue-tracker/model"
56
"issue-tracker/repo"
67
"issue-tracker/utils"
78
"log"
89
)
910

1011
func main() {
1112
mongoClient := config.NewMongoConnection()
12-
1313
ticketrepo := repo.NewMongoTicketRepository(mongoClient.Client)
14-
ticket, err := ticketrepo.FindByID("first-id")
14+
15+
ticket := ticketrepo.FindByID("1234")
16+
log.Println(utils.ToString(ticket))
17+
18+
err := ticketrepo.Delete("1234")
1519
if err != nil {
16-
log.Fatal("Something went wrong")
20+
log.Printf("Something wrong happends: %s\n", err)
1721
}
18-
log.Println(utils.ToString(ticket))
22+
err = ticketrepo.Delete("first-id")
23+
if err != nil {
24+
log.Printf("Something wrong happends: %s\n", err)
25+
}
26+
27+
newTicket := model.Ticket{
28+
ID: "1234",
29+
Title: "This is a test ticket",
30+
Description: "I'm a super Test!!",
31+
Status: model.StatusNew,
32+
}
33+
err = ticketrepo.Add(newTicket)
34+
if err != nil {
35+
log.Printf("Something wrong happends: %s\n", err)
36+
}
37+
38+
newTicket.Status = model.StatusReady
39+
err = ticketrepo.Update(newTicket)
40+
if err != nil {
41+
log.Printf("Something wrong happends: %s\n", err)
42+
}
43+
44+
updateNonExistingTicket := model.Ticket{
45+
ID: "567",
46+
Title: "This is a test ticket",
47+
Description: "I'm a super Test!!",
48+
Status: model.StatusNew,
49+
}
50+
err = ticketrepo.Update(updateNonExistingTicket)
51+
if err != nil {
52+
log.Printf("Something wrong happends: %s\n", err)
53+
}
54+
err = ticketrepo.Add(updateNonExistingTicket)
55+
if err != nil {
56+
log.Printf("Something wrong happends: %s\n", err)
57+
}
58+
59+
tickets := ticketrepo.FindAll()
60+
log.Println(utils.ToString(tickets))
61+
62+
tickets = ticketrepo.FindAllByStatus(model.StatusReady)
63+
log.Println(utils.ToString(tickets))
1964

2065
err = mongoClient.CloseMongoConnection()
2166
if err != nil {

repo/repository.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package repo
33
import "issue-tracker/model"
44

55
type TicketRepository interface {
6-
FindByID(ID string) (model.Ticket, error)
7-
FindAllByStatus(status model.Status) ([]model.Ticket, error)
6+
FindByID(ID string) model.Ticket
7+
FindAll() []model.Ticket
8+
FindAllByStatus(status model.Status) []model.Ticket
89
Add(ticket model.Ticket) error
9-
Remove(ticket model.Ticket) error
10+
Update(ticket model.Ticket) error
11+
Delete(ID string) error
1012
}

repo/ticketrepository.go

+63-8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package repo
22

33
import (
44
"context"
5+
"errors"
56
"go.mongodb.org/mongo-driver/bson"
67
"go.mongodb.org/mongo-driver/mongo"
78
"issue-tracker/model"
@@ -21,24 +22,78 @@ func NewMongoTicketRepository(client *mongo.Client) TicketRepository {
2122
}
2223
}
2324

24-
func (r *MongoTicketRepository) FindByID(ID string) (model.Ticket, error) {
25+
func (r *MongoTicketRepository) FindByID(ID string) model.Ticket {
2526
var result model.Ticket
2627
err := r.collection.FindOne(context.TODO(), bson.D{{"id", ID}}).Decode(&result)
2728
if err != nil {
2829
log.Printf("Unable to retrieve ticket with ID: '%s', error: %s\n", ID, err)
29-
return model.Ticket{}, err
30+
return model.Ticket{}
3031
}
31-
return result, nil
32+
return result
3233
}
3334

34-
func (r *MongoTicketRepository) FindAllByStatus(status model.Status) ([]model.Ticket, error) {
35-
panic("implement me")
35+
func (r *MongoTicketRepository) findMany(filter bson.D) []model.Ticket {
36+
var results []model.Ticket
37+
38+
cur, err := r.collection.Find(context.TODO(), filter, nil)
39+
if err != nil {
40+
log.Printf("Unable to retrieve all tickets, error: %s\n", err)
41+
return []model.Ticket{}
42+
}
43+
44+
for cur.Next(context.TODO()) {
45+
var elem model.Ticket
46+
err := cur.Decode(&elem)
47+
if err != nil {
48+
log.Printf("Unable to decode ticket, error: %s\n", err)
49+
}
50+
results = append(results, elem)
51+
}
52+
53+
if err := cur.Err(); err != nil {
54+
log.Printf("Something unexpected went wrong while retreaving all tickets, error: %s\n", err)
55+
}
56+
if err := cur.Close(context.TODO()); err != nil {
57+
log.Printf("Unable to close cursor while retreaving all tickets, error: %s\n", err)
58+
}
59+
60+
return results
61+
}
62+
63+
func (r *MongoTicketRepository) FindAll() []model.Ticket {
64+
return r.findMany(bson.D{{}})
65+
}
66+
67+
func (r *MongoTicketRepository) FindAllByStatus(status model.Status) []model.Ticket {
68+
return r.findMany(bson.D{{"status", status}})
3669
}
3770

3871
func (r *MongoTicketRepository) Add(ticket model.Ticket) error {
39-
panic("implement me")
72+
_, err := r.collection.InsertOne(context.TODO(), ticket)
73+
return err
4074
}
4175

42-
func (r *MongoTicketRepository) Remove(ticket model.Ticket) error {
43-
panic("implement me")
76+
func (r *MongoTicketRepository) Update(ticket model.Ticket) error {
77+
filter := bson.D{{"id", ticket.ID}}
78+
update := bson.D{
79+
{"$set", bson.D{
80+
{"title", ticket.Title},
81+
{"description", ticket.Description},
82+
{"status", ticket.Status},
83+
}},
84+
}
85+
86+
updateResult, err := r.collection.UpdateOne(context.TODO(), filter, update)
87+
if updateResult.MatchedCount == 0 || updateResult.ModifiedCount == 0 {
88+
return errors.New("Ticket '" + ticket.ID + "' cannot be updated because it has not been created yet")
89+
}
90+
return err
91+
}
92+
93+
func (r *MongoTicketRepository) Delete(ID string) error {
94+
deleteResult, err := r.collection.DeleteOne(context.TODO(), bson.D{{"id", ID}}, nil)
95+
if deleteResult.DeletedCount == 0 {
96+
return errors.New("Ticket '" + ID + "' cannot be deleted because it does not exist")
97+
}
98+
return err
4499
}

0 commit comments

Comments
 (0)