Files
pipu-music/services/api/internal/auth/transfer_handler.go
T
mrleo1nid f1528de948
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m17s
ci / ts / ts (packages + web) (push) Successful in 3m13s
ci / api / api (push) Successful in 59s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m31s
ci / db / db (push) Successful in 2m50s
feat(admin): transfer user accounts and show local cover coverage
2026-10-23 02:17:06 +03:00

62 lines
2.1 KiB
Go

package auth
import (
"context"
"encoding/json"
"net/http"
"pipu/api/internal/api/gen"
)
func (h *Handler) ExportUsers(ctx context.Context, _ gen.ExportUsersRequestObject) (gen.ExportUsersResponseObject, error) {
p, err := principal(ctx)
if err != nil {
return nil, err
}
users, err := h.svc.ExportUsers(ctx, p)
if err != nil {
return nil, err
}
archive := gen.UserArchive{Version: 1, Users: make([]gen.UserArchiveEntry, 0, len(users))}
for _, u := range users {
archive.Users = append(archive.Users, gen.UserArchiveEntry{
Username: u.Username, DisplayName: u.DisplayName, PasswordHash: u.PasswordHash, Role: gen.Role(u.Role),
IsBlocked: u.IsBlocked, MustChangePassword: u.MustChangePassword, MustChangeCredentials: u.MustChangeCredentials,
ReviewsUploads: u.ReviewsUploads, ManagesUpdates: u.ManagesUpdates,
})
}
return archiveResponse{archive}, nil
}
type archiveResponse struct{ gen.UserArchive }
func (r archiveResponse) VisitExportUsersResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.Header().Set("Content-Disposition", `attachment; filename="pipu-users.json"`)
w.Header().Set("Cache-Control", "no-store")
return json.NewEncoder(w).Encode(r.UserArchive)
}
func (h *Handler) ImportUsers(ctx context.Context, req gen.ImportUsersRequestObject) (gen.ImportUsersResponseObject, error) {
p, err := principal(ctx)
if err != nil {
return nil, err
}
if req.Body == nil {
return nil, archiveInvalid()
}
entries := make([]ArchivedUser, 0, len(req.Body.Users))
for _, u := range req.Body.Users {
entries = append(entries, ArchivedUser{
Username: u.Username, DisplayName: u.DisplayName, PasswordHash: u.PasswordHash, Role: Role(u.Role),
IsBlocked: u.IsBlocked, MustChangePassword: u.MustChangePassword, MustChangeCredentials: u.MustChangeCredentials,
ReviewsUploads: u.ReviewsUploads, ManagesUpdates: u.ManagesUpdates,
})
}
created, skipped, err := h.svc.ImportUsers(ctx, p, int(req.Body.Version), entries)
if err != nil {
return nil, err
}
return gen.ImportUsers200JSONResponse{Created: created, Skipped: skipped}, nil
}