103 рядки
3.1 KiB
Go
103 рядки
3.1 KiB
Go
package share
|
|
|
|
import (
|
|
"github.com/mymmrac/telego"
|
|
th "github.com/mymmrac/telego/telegohandler"
|
|
|
|
"git.entityseven.com/rilaxik/pllist/internal/domain"
|
|
"git.entityseven.com/rilaxik/pllist/internal/service"
|
|
"git.entityseven.com/rilaxik/pllist/internal/telegram/shared"
|
|
)
|
|
|
|
func (h *Handler) manageCallback(ctx *th.Context, query telego.CallbackQuery) error {
|
|
listID, err := shared.CallbackID(query.Data, shared.ActionShareManage)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return h.showShares(ctx, shared.UserFrom(ctx).ID,
|
|
shared.QueryChatID(query), shared.QueryMessageID(query), listID)
|
|
}
|
|
|
|
func (h *Handler) addCallback(ctx *th.Context, query telego.CallbackQuery) error {
|
|
listID, err := parseAdd(query.Data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
user := shared.UserFrom(ctx)
|
|
if _, err := h.shares.List(ctx, user.ID, listID); err != nil {
|
|
return err
|
|
}
|
|
h.pending.Set(user.TelegramID, service.Pending{
|
|
Action: service.PendingShareTarget,
|
|
ListID: listID,
|
|
})
|
|
return h.sender.Send(ctx, shared.QueryChatID(query), addSharePrompt, nil)
|
|
}
|
|
|
|
func (h *Handler) roleCallback(ctx *th.Context, query telego.CallbackQuery) error {
|
|
listID, role, err := parseRole(query.Data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
user := shared.UserFrom(ctx)
|
|
pending, ok := h.pending.Get(user.TelegramID)
|
|
if !ok || pending.Action != service.PendingShareRole || pending.ListID != listID {
|
|
return domain.NewValidationError(shareExpiredText)
|
|
}
|
|
if err := h.shares.Share(ctx, user, listID, pending.Target, role); err != nil {
|
|
return err
|
|
}
|
|
h.pending.Clear(user.TelegramID)
|
|
return h.showShares(ctx, user.ID,
|
|
shared.QueryChatID(query), shared.QueryMessageID(query), listID)
|
|
}
|
|
|
|
func (h *Handler) viewCallback(ctx *th.Context, query telego.CallbackQuery) error {
|
|
ref, err := parseView(query.Data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return h.showShare(ctx, shared.UserFrom(ctx).ID,
|
|
shared.QueryChatID(query), shared.QueryMessageID(query), ref)
|
|
}
|
|
|
|
func (h *Handler) setRoleCallback(ctx *th.Context, query telego.CallbackQuery) error {
|
|
ref, role, err := parseSet(query.Data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
user := shared.UserFrom(ctx)
|
|
if err := h.shares.SetRole(ctx, user.ID, ref.listID, ref.shareID, ref.pending, role); err != nil {
|
|
return err
|
|
}
|
|
return h.showShares(ctx, user.ID,
|
|
shared.QueryChatID(query), shared.QueryMessageID(query), ref.listID)
|
|
}
|
|
|
|
func (h *Handler) revokeCallback(ctx *th.Context, query telego.CallbackQuery) error {
|
|
ref, err := parseRevoke(query.Data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
user := shared.UserFrom(ctx)
|
|
list, share, err := h.shares.Find(ctx, user.ID, ref.listID, ref.shareID, ref.pending)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return h.sender.EditOrSend(ctx, shared.QueryChatID(query), shared.QueryMessageID(query),
|
|
revokeConfirmText(list, share), revokeConfirmKeyboard(ref))
|
|
}
|
|
|
|
func (h *Handler) revokeYesCallback(ctx *th.Context, query telego.CallbackQuery) error {
|
|
ref, err := parseRevokeYes(query.Data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
user := shared.UserFrom(ctx)
|
|
if err := h.shares.Revoke(ctx, user.ID, ref.listID, ref.shareID, ref.pending); err != nil {
|
|
return err
|
|
}
|
|
return h.showShares(ctx, user.ID,
|
|
shared.QueryChatID(query), shared.QueryMessageID(query), ref.listID)
|
|
}
|