91 lines
2.4 KiB
Go
91 lines
2.4 KiB
Go
package webdebug
|
|
|
|
import (
|
|
"database/sql"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
httputils "git.mstar.dev/mstar/goutils/http"
|
|
"git.mstar.dev/mstar/goutils/sliceutils"
|
|
"github.com/rs/zerolog/log"
|
|
"gorm.io/gorm"
|
|
|
|
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
|
"git.mstar.dev/mstar/linstrom/storage-new/models"
|
|
webshared "git.mstar.dev/mstar/linstrom/web/shared"
|
|
)
|
|
|
|
func postAs(w http.ResponseWriter, r *http.Request) {
|
|
type Inbound struct {
|
|
Username string `json:"username"`
|
|
Content string `json:"content"`
|
|
}
|
|
dec := json.NewDecoder(r.Body)
|
|
data := Inbound{}
|
|
err := dec.Decode(&data)
|
|
if err != nil {
|
|
httputils.HttpErr(w, 0, "json decode failed", http.StatusBadRequest)
|
|
return
|
|
}
|
|
user, err := dbgen.User.GetByUsername(data.Username)
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
httputils.HttpErr(w, 0, "no user with that name", http.StatusNotFound)
|
|
} else {
|
|
log.Error().Err(err).Str("name", data.Username).Msg("Failed to find user")
|
|
}
|
|
return
|
|
}
|
|
n := dbgen.Note
|
|
note := models.Note{
|
|
Creator: *user,
|
|
CreatorId: user.ID,
|
|
RawContent: data.Content,
|
|
Remote: false,
|
|
ContentWarning: sql.NullString{Valid: false},
|
|
RepliesTo: sql.NullString{Valid: false},
|
|
Quotes: sql.NullString{Valid: false},
|
|
AccessLevel: models.NOTE_TARGET_PUBLIC,
|
|
OriginId: 1,
|
|
}
|
|
n.Select(
|
|
n.CreatorId,
|
|
n.RawContent,
|
|
n.Remote,
|
|
n.ContentWarning,
|
|
n.RepliesTo,
|
|
n.Quotes,
|
|
n.AccessLevel,
|
|
n.OriginId,
|
|
).Create(¬e)
|
|
}
|
|
|
|
func notesFrom(w http.ResponseWriter, r *http.Request) {
|
|
username := r.FormValue("username")
|
|
user, err := dbgen.User.GetByUsername(username)
|
|
if err != nil {
|
|
log.Error().Err(err).Str("name", username).Msg("Failed to get user")
|
|
httputils.HttpErr(w, 0, "failed to get user", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
notes, err := dbgen.Note.GetNotesPaged(user.ID, 0, uint8(models.NOTE_TARGET_PUBLIC))
|
|
if err != nil {
|
|
log.Error().Err(err).Str("name", username).Msg("Failed to get notes")
|
|
httputils.HttpErr(w, 0, "failed to get notes", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
publicNotes := sliceutils.Map(notes, func(t models.Note) webshared.Note {
|
|
n := webshared.Note{}
|
|
n.FromModel(&t)
|
|
return n
|
|
})
|
|
jsonNotes, err := json.Marshal(publicNotes)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to marshal notes")
|
|
httputils.HttpErr(w, 0, "failed to marshal", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
fmt.Fprint(w, string(jsonNotes))
|
|
}
|