]> git.frustrated-labs.net Git - squad-rotation-bot.git/commitdiff
refactor: replace pg database with in memory db
authorAlexander Goussas <[email protected]>
Sun, 26 Apr 2026 03:25:15 +0000 (22:25 -0500)
committerAlexander Goussas <[email protected]>
Sun, 26 Apr 2026 03:25:15 +0000 (22:25 -0500)
go.mod
services/member_service.go
services/rotation_service.go

diff --git a/go.mod b/go.mod
index 8c867aceb9d158451f206d1fc6deb2a3009a79eb..ca5802225ae40ae76650f60d9df2cffaa4892d8a 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -3,9 +3,4 @@ module github.com/aloussase/squad-rotation-bot
 go 1.25.1
 
 require (
-       github.com/jackc/pgpassfile v1.0.0 // indirect
-       github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
-       github.com/jackc/pgx/v5 v5.7.6 // indirect
-       golang.org/x/crypto v0.37.0 // indirect
-       golang.org/x/text v0.24.0 // indirect
 )
index 087f480eccab9d8ebda9fc5e08c08111e8b89d8c..9f76b52aa2ad60f16fb0dcbbb07e234343056bb4 100644 (file)
@@ -1,10 +1,9 @@
 package services
 
 import (
-       "context"
+       "sync"
 
        "github.com/aloussase/squad-rotation-bot/entities"
-       "github.com/jackc/pgx/v5"
 )
 
 type MemberService interface {
@@ -16,40 +15,34 @@ type MemberService interface {
 }
 
 type memberServiceImpl struct {
-       conn *pgx.Conn
+       mu      sync.Mutex
+       members []entities.SquadMember
 }
 
 // Create / Create a new instance of MemberService.
-func Create(conn *pgx.Conn) MemberService {
+func Create() MemberService {
        return &memberServiceImpl{
-               conn: conn,
+               members: make([]entities.SquadMember, 0),
        }
 }
 
 func (ms *memberServiceImpl) CreateMember(name, avatarUrl string) error {
-       query := "insert into squad_members (full_name, avatar_url) values ($1, $2)"
-       _, err := ms.conn.Exec(context.Background(), query, name, avatarUrl)
-       return err
-}
+       ms.mu.Lock()
+       defer ms.mu.Unlock()
 
-func (ms *memberServiceImpl) ListMembers() ([]entities.SquadMember, error) {
-       query := "select (id, full_name, avatar_url) from squad_members"
-       rows, err := ms.conn.Query(context.Background(), query)
-       if err != nil {
-               return nil, err
-       }
+       nextId := len(ms.members) + 1
 
-       defer rows.Close()
+       newMember := entities.SquadMember{
+               ID:        nextId,
+               FullName:  name,
+               AvatarUrl: &avatarUrl,
+       }
 
-       members, err := pgx.CollectRows(rows, func(row pgx.CollectableRow) (entities.SquadMember, error) {
-               var member entities.SquadMember
-               err := row.Scan(&member)
-               return member, err
-       })
+       ms.members = append(ms.members, newMember)
 
-       if err != nil {
-               return nil, err
-       }
+       return nil
+}
 
-       return members, nil
+func (ms *memberServiceImpl) ListMembers() ([]entities.SquadMember, error) {
+       return ms.members, nil
 }
index 7854d9f5c27cadd9df9de181e2d79217d194b31a..7398753d6d3731ec4bbe719d858644889632784c 100644 (file)
@@ -1,12 +1,11 @@
 package services
 
 import (
-       "context"
        "fmt"
        "slices"
+       "sync"
 
        "github.com/aloussase/squad-rotation-bot/entities"
-       "github.com/jackc/pgx/v5"
 )
 
 type RotationService interface {
@@ -15,12 +14,13 @@ type RotationService interface {
 }
 
 type rotationServiceImpl struct {
-       conn *pgx.Conn
+       mu      sync.Mutex
+       counter int
 }
 
-func CreateRotationService(conn *pgx.Conn) RotationService {
+func CreateRotationService() RotationService {
        return &rotationServiceImpl{
-               conn: conn,
+               counter: 1,
        }
 }
 
@@ -29,12 +29,11 @@ func (rs *rotationServiceImpl) ChooseNextInRotation(members []entities.SquadMemb
                return entities.SquadMember{}, fmt.Errorf("list of members if empty")
        }
 
-       var next int
+       rs.mu.Lock()
+       defer rs.mu.Unlock()
 
-       err := rs.conn.QueryRow(context.Background(), "select nextval('squad_rotation')").Scan(&next)
-       if err != nil {
-               return entities.SquadMember{}, err
-       }
+       next := rs.counter
+       rs.counter += 1
 
        // Sort the members to ensure a deterministic pick.
        sortedMembers := slices.SortedFunc(slices.Values(members), func(a, b entities.SquadMember) int {