feat: release v0.2.0 profiles, chat, freeze, and bots
Ship the product pass on the v0.1.3 schema with additive migrations, a replica migration lock, and bot accounts kept out of people lists.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
@@ -22,21 +23,45 @@ func (s *Server) handlePublicProfile(w http.ResponseWriter, r *http.Request) {
|
||||
writeErr(w, http.StatusInternalServerError, "بارگذاری پروفایل ممکن نشد")
|
||||
return
|
||||
}
|
||||
u = s.settleAccount(r.Context(), u)
|
||||
s.signUserMedia(u)
|
||||
writeJSON(w, http.StatusOK, map[string]any{
|
||||
"user": map[string]any{
|
||||
"id": u.ID,
|
||||
"name": u.Name,
|
||||
"username": u.Username,
|
||||
"role": u.Role,
|
||||
"xp": u.XP,
|
||||
"hearts": u.Hearts,
|
||||
"streakCurrent": u.StreakCurrent,
|
||||
"streakLongest": u.StreakLongest,
|
||||
"avatarVariant": u.AvatarVariant,
|
||||
"avatarPalette": u.AvatarPalette,
|
||||
"avatarPhoto": u.AvatarPhoto,
|
||||
"isLocked": u.IsLocked,
|
||||
},
|
||||
})
|
||||
me := currentUser(r)
|
||||
extras, err := s.store.GetProfileExtras(r.Context(), u.ID)
|
||||
if err != nil {
|
||||
extras = store.ProfileExtras{}
|
||||
}
|
||||
full := me.ID == u.ID || me.Role.IsStaff()
|
||||
if !full && !extras.Public {
|
||||
writeJSON(w, http.StatusOK, map[string]any{
|
||||
"user": map[string]any{
|
||||
"id": u.ID, "name": u.Name, "role": u.Role,
|
||||
"avatarVariant": u.AvatarVariant, "avatarPalette": u.AvatarPalette, "avatarPhoto": u.AvatarPhoto,
|
||||
"private": true, "isFrozen": u.IsFrozen, "isClosed": u.IsClosed,
|
||||
},
|
||||
})
|
||||
return
|
||||
}
|
||||
view := map[string]any{
|
||||
"id": u.ID, "name": u.Name, "username": u.Username, "role": u.Role,
|
||||
"avatarVariant": u.AvatarVariant, "avatarPalette": u.AvatarPalette, "avatarPhoto": u.AvatarPhoto,
|
||||
"private": false, "public": extras.Public,
|
||||
"createdAt": u.CreatedAt,
|
||||
"isFrozen": u.IsFrozen, "isClosed": u.IsClosed,
|
||||
}
|
||||
if full || extras.ShowStats {
|
||||
view["xp"] = u.XP
|
||||
view["hearts"] = u.Hearts
|
||||
view["streakCurrent"] = u.StreakCurrent
|
||||
view["streakLongest"] = u.StreakLongest
|
||||
view["isLocked"] = u.IsLocked
|
||||
}
|
||||
if full || extras.Public {
|
||||
view["banner"] = s.signExistingMediaURL(extras.Banner)
|
||||
links := extras.SocialLinks
|
||||
if len(links) == 0 {
|
||||
links = []byte(`[]`)
|
||||
}
|
||||
view["socialLinks"] = json.RawMessage(links)
|
||||
}
|
||||
writeJSON(w, http.StatusOK, map[string]any{"user": view})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user