Appointment feature

This commit is contained in:
daru
2022-05-28 14:07:10 +02:00
parent a079fbf9db
commit 231cecedd8
3 changed files with 207 additions and 1 deletions

89
nuss.go
View File

@@ -79,6 +79,51 @@ func AddUserToAnime(username string, userId, animeId int64, progress int, update
return &anime, err
}
func AddUserToAppointment(username string, animeId int64, meeting time.Time) (*Appointment, error) {
var appoint Appointment
err := db.Update(
func(tx *nutsdb.Tx) error {
keyBytes := Int64AndDateToBytes(animeId, meeting)
e, err := tx.Get(bucketAppoint, keyBytes)
var users []string
if err != nil {
users = make([]string, 0)
} else {
// parse user list
users, err = parseAppointmentUserList(e.Value)
if err != nil {
return err
}
}
// check if user already part
for _, u := range users {
if u == username {
// early terminate
appoint = Appointment{
Anime: animeId,
Time: meeting,
Users: users,
}
return err
}
}
// add user
users = append(users, username)
appoint = Appointment{
Anime: animeId,
Time: meeting,
Users: users,
}
newData, err := json.Marshal(users)
if err != nil {
return err
}
return tx.Put(bucketAppoint, keyBytes, newData, nutsdb.Persistent)
})
return &appoint, err
}
func DeleteUserFromAnime(username string, userId, animeId int64) (*AnimeUser, error) {
var anime AnimeUser
err := db.Update(
@@ -167,6 +212,50 @@ func DeleteUserFromAnimes(userId int64) error {
})
}
func DeleteUserFromAppointment(username string, animeId int64, meeting time.Time) (*Appointment, error) {
var appoint Appointment
err := db.Update(
func(tx *nutsdb.Tx) error {
keyBytes := Int64AndDateToBytes(animeId, meeting)
e, err := tx.Get(bucketAppoint, keyBytes)
var users []string
if err != nil {
users = make([]string, 0)
} else {
// parse user list
users, err = parseAppointmentUserList(e.Value)
if err != nil {
return err
}
}
// check if user already part
for i, u := range users {
// early terminate
if u == username {
// delete user from list
users[i] = users[len(users)-1]
users = users[:len(users)-1]
// check if appointment needs recycling
appoint = Appointment{
Anime: animeId,
Time: meeting,
Users: users,
}
if len(users) == 0 {
return tx.Delete(bucketAppoint, keyBytes)
}
newData, err := json.Marshal(users)
if err != nil {
return err
}
return tx.Put(bucketAppoint, keyBytes, newData, nutsdb.Persistent)
}
}
return fmt.Errorf("%s schaut nicht %d um %s", username, animeId, meeting.Format(time.RFC3339))
})
return &appoint, err
}
func DeleteAnime(tx *nutsdb.Tx, keyBytes []byte) error {
tx.Delete(bucketChat, keyBytes)
return tx.Delete(bucketAnime, keyBytes)