Minor code reorganization and polishing

This commit is contained in:
2022-03-06 14:53:15 +01:00
parent 0f22ca3437
commit c76e078682
5 changed files with 165 additions and 162 deletions
-156
View File
@@ -106,16 +106,6 @@ type Store interface {
// TODO: Create an SQLite implementation
// memDB is the first Store implementation used for testing.
type memDB struct {
// FIXME: Giusto per la cronaca fare le modifiche in questo modo alle mappe non è per niente thread safe, servirebbe come minimo usare un mutex per quando si scrive su una di queste variabili
// mutex *sync.Mutex
users map[string]*User
rooms map[string]*Room
seats map[string]*Seat
}
// NewInMemoryStore creates an instance of memDB hidden behind the Store interface.
func NewInMemoryStore() Store {
db := &memDB{
@@ -155,149 +145,3 @@ func NewInMemoryStore() Store {
return db
}
//
// memDB Implementation
//
func (db *memDB) CreateUser(user *User) error {
if _, present := db.users[user.ID]; present {
return ErrAlreadyExists
}
db.users[user.ID] = user
return nil
}
func (db *memDB) CreateRoom(room *Room) error {
if _, present := db.rooms[room.ID]; present {
return ErrAlreadyExists
}
db.rooms[room.ID] = room
return nil
}
func (db *memDB) CreateSeat(seat *Seat) error {
if _, present := db.seats[seat.ID]; present {
return ErrAlreadyExists
}
db.seats[seat.ID] = seat
return nil
}
func (db *memDB) DeleteUser(user *User) error {
if _, present := db.users[user.ID]; !present {
return ErrDoesntExist
}
delete(db.users, user.ID)
return nil
}
func (db *memDB) DeleteRoom(room *Room) error {
if _, present := db.rooms[room.ID]; !present {
return ErrDoesntExist
}
delete(db.rooms, room.ID)
return nil
}
func (db *memDB) DeleteSeat(seat *Seat) error {
if _, present := db.seats[seat.ID]; !present {
return ErrDoesntExist
}
delete(db.seats, seat.ID)
return nil
}
func (db *memDB) GetUser(userID string) (*User, error) {
user, present := db.users[userID]
if !present {
return nil, fmt.Errorf(`no such user "%s"`, userID)
}
return user, nil
}
func (db *memDB) GetRoom(roomID string) (*Room, error) {
room, present := db.rooms[roomID]
if !present {
return nil, fmt.Errorf(`no such room "%s"`, roomID)
}
return room, nil
}
func (db *memDB) GetSeat(seatID string) (*Seat, error) {
seat, present := db.seats[seatID]
if !present {
return nil, fmt.Errorf(`no such seat "%s"`, seatID)
}
return seat, nil
}
func (db *memDB) GetRooms() ([]string, error) {
roomIDs := []string{}
for roomID := range db.rooms {
roomIDs = append(roomIDs, roomID)
}
return roomIDs, nil
}
func (db *memDB) GetRoomOccupiedSeats(roomID string) ([]string, error) {
room, err := db.GetRoom(roomID)
if err != nil {
return nil, err
}
seats := []string{}
for _, seatID := range room.SeatIDs {
seat := db.seats[seatID]
if len(seat.OccupiedBy) == 1 {
seats = append(seats, seatID)
}
}
return seats, nil
}
func (db *memDB) GetRoomFreeSeats(roomID string) ([]string, error) {
room, err := db.GetRoom(roomID)
if err != nil {
return nil, err
}
seats := []string{}
for _, seatID := range room.SeatIDs {
seat := db.seats[seatID]
if len(seat.OccupiedBy) == 0 {
seats = append(seats, seatID)
}
}
return seats, nil
}
func (db *memDB) GetUserSeat(userID string) ([]string, error) {
for _, seat := range db.seats {
if len(seat.OccupiedBy) > 0 && seat.OccupiedBy[0] == userID {
return []string{userID}, nil
}
}
return []string{}, nil
}
func (db *memDB) OccupySeat(seatID, userID string) error {
db.seats[seatID].OccupiedBy = []string{userID}
return nil
}
func (db *memDB) FreeSeat(seatID string) error {
db.seats[seatID].OccupiedBy = []string{}
return nil
}
+155
View File
@@ -0,0 +1,155 @@
package db
import "fmt"
// memDB is the first Store implementation used for testing.
type memDB struct {
// FIXME: Giusto per la cronaca fare le modifiche in questo modo alle mappe non è per niente thread safe, servirebbe come minimo usare un mutex per quando si scrive su una di queste variabili
// mutex *sync.Mutex
users map[string]*User
rooms map[string]*Room
seats map[string]*Seat
}
func (db *memDB) CreateUser(user *User) error {
if _, present := db.users[user.ID]; present {
return ErrAlreadyExists
}
db.users[user.ID] = user
return nil
}
func (db *memDB) CreateRoom(room *Room) error {
if _, present := db.rooms[room.ID]; present {
return ErrAlreadyExists
}
db.rooms[room.ID] = room
return nil
}
func (db *memDB) CreateSeat(seat *Seat) error {
if _, present := db.seats[seat.ID]; present {
return ErrAlreadyExists
}
db.seats[seat.ID] = seat
return nil
}
func (db *memDB) DeleteUser(user *User) error {
if _, present := db.users[user.ID]; !present {
return ErrDoesntExist
}
delete(db.users, user.ID)
return nil
}
func (db *memDB) DeleteRoom(room *Room) error {
if _, present := db.rooms[room.ID]; !present {
return ErrDoesntExist
}
delete(db.rooms, room.ID)
return nil
}
func (db *memDB) DeleteSeat(seat *Seat) error {
if _, present := db.seats[seat.ID]; !present {
return ErrDoesntExist
}
delete(db.seats, seat.ID)
return nil
}
func (db *memDB) GetUser(userID string) (*User, error) {
user, present := db.users[userID]
if !present {
return nil, fmt.Errorf(`no such user "%s"`, userID)
}
return user, nil
}
func (db *memDB) GetRoom(roomID string) (*Room, error) {
room, present := db.rooms[roomID]
if !present {
return nil, fmt.Errorf(`no such room "%s"`, roomID)
}
return room, nil
}
func (db *memDB) GetSeat(seatID string) (*Seat, error) {
seat, present := db.seats[seatID]
if !present {
return nil, fmt.Errorf(`no such seat "%s"`, seatID)
}
return seat, nil
}
func (db *memDB) GetRooms() ([]string, error) {
roomIDs := []string{}
for roomID := range db.rooms {
roomIDs = append(roomIDs, roomID)
}
return roomIDs, nil
}
func (db *memDB) GetRoomOccupiedSeats(roomID string) ([]string, error) {
room, err := db.GetRoom(roomID)
if err != nil {
return nil, err
}
seats := []string{}
for _, seatID := range room.SeatIDs {
seat := db.seats[seatID]
if len(seat.OccupiedBy) == 1 {
seats = append(seats, seatID)
}
}
return seats, nil
}
func (db *memDB) GetRoomFreeSeats(roomID string) ([]string, error) {
room, err := db.GetRoom(roomID)
if err != nil {
return nil, err
}
seats := []string{}
for _, seatID := range room.SeatIDs {
seat := db.seats[seatID]
if len(seat.OccupiedBy) == 0 {
seats = append(seats, seatID)
}
}
return seats, nil
}
func (db *memDB) GetUserSeat(userID string) ([]string, error) {
for _, seat := range db.seats {
if len(seat.OccupiedBy) > 0 && seat.OccupiedBy[0] == userID {
return []string{userID}, nil
}
}
return []string{}, nil
}
func (db *memDB) OccupySeat(seatID, userID string) error {
db.seats[seatID].OccupiedBy = []string{userID}
return nil
}
func (db *memDB) FreeSeat(seatID string) error {
db.seats[seatID].OccupiedBy = []string{}
return nil
}