65 lines
1.9 KiB
Go
65 lines
1.9 KiB
Go
/*
|
|
* Amsterdam Web Communities System
|
|
* Copyright (c) 2025-2026 Erbosoft Metaverse Design Solutions, All Rights Reserved
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
*/
|
|
// The database package contains database management and storage logic.
|
|
package database
|
|
|
|
import "context"
|
|
|
|
// ConferenceHotlist represents a user's conference hotlist.
|
|
type ConferenceHotlist struct {
|
|
Uid int32 `db:"uid"`
|
|
Sequence int16 `db:"sequence"`
|
|
CommId int32 `db:"commid"`
|
|
ConfId int32 `db:"confid"`
|
|
}
|
|
|
|
// Community gets the community pointer from the hotlist.
|
|
func (h *ConferenceHotlist) Community(ctx context.Context) (*Community, error) {
|
|
return AmGetCommunity(ctx, h.CommId)
|
|
}
|
|
|
|
// Conference gets the conference pointer from the hotlist.
|
|
func (h *ConferenceHotlist) Conference(ctx context.Context) (*Conference, error) {
|
|
return AmGetConference(ctx, h.ConfId)
|
|
}
|
|
|
|
// AmGetConferenceHotlist gets the conference hotlist for a user.
|
|
func AmGetConferenceHotlist(ctx context.Context, u *User) ([]ConferenceHotlist, error) {
|
|
var rc []ConferenceHotlist
|
|
err := amdb.SelectContext(ctx, &rc, "SELECT * FROM confhotlist WHERE uid = ? ORDER BY sequence", u.Uid)
|
|
return rc, err
|
|
}
|
|
|
|
// AmCopyConferenceHotlist copies the conference hotlist from one user to another.
|
|
func AmCopyConferenceHotlist(ctx context.Context, from, to *User) error {
|
|
hotlist, err := AmGetConferenceHotlist(ctx, from)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
success := false
|
|
tx := amdb.MustBegin()
|
|
defer func() {
|
|
if !success {
|
|
tx.Rollback()
|
|
}
|
|
}()
|
|
for _, hl := range hotlist {
|
|
if _, err = tx.ExecContext(ctx, "INSERT INTO confhotlist (uid, sequence, commid, confid) VALUES (?, ?, ?, ?)",
|
|
to.Uid, hl.Sequence, hl.CommId, hl.ConfId); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if err = tx.Commit(); err != nil {
|
|
return err
|
|
}
|
|
success = true
|
|
return nil
|
|
}
|