mirror of
https://github.com/ultrasn0w/huso.git
synced 2025-12-13 12:29:53 +01:00
Appointment feature
This commit is contained in:
89
nuss.go
89
nuss.go
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user