48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
|
|
"spark-server/internal/module/friend/entity"
|
|
"spark-server/internal/pkg/errs"
|
|
)
|
|
|
|
type RequestView struct {
|
|
ID int64 `json:"id"`
|
|
From UserCard `json:"from"`
|
|
Reason string `json:"reason"`
|
|
Source entity.Source `json:"source"`
|
|
CreatedAt int64 `json:"created_at"`
|
|
UpdatedAt int64 `json:"updated_at"`
|
|
}
|
|
|
|
type RequestList struct {
|
|
Items []*RequestView `json:"items"`
|
|
}
|
|
|
|
func (s *Service) ListRequests(ctx context.Context, userID int64, limit int) (*RequestList, error) {
|
|
if !s.ready() || userID <= 0 {
|
|
return nil, errs.ErrUnauthorized
|
|
}
|
|
rows, err := s.repo.ListIncoming(ctx, userID, entity.RequestPending, entity.ClampLimit(limit))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
items := make([]*RequestView, 0, len(rows))
|
|
for _, req := range rows {
|
|
from, err := s.users.Get(ctx, req.FromUser)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
items = append(items, &RequestView{
|
|
ID: req.ID,
|
|
From: cardOf(from),
|
|
Reason: req.Reason,
|
|
Source: req.Source,
|
|
CreatedAt: entity.UnixMS(req.CreatedAt),
|
|
UpdatedAt: entity.UnixMS(req.UpdatedAt),
|
|
})
|
|
}
|
|
return &RequestList{Items: items}, nil
|
|
}
|