mirror of
https://github.com/versia-pub/versia-go.git
synced 2026-03-13 04:29:15 +01:00
chore: init
This commit is contained in:
commit
320715f3e7
174 changed files with 42083 additions and 0 deletions
76
internal/entity/follow.go
Normal file
76
internal/entity/follow.go
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
package entity
|
||||
|
||||
import (
|
||||
"github.com/lysand-org/versia-go/ent"
|
||||
"github.com/lysand-org/versia-go/pkg/lysand"
|
||||
)
|
||||
|
||||
type Follow struct {
|
||||
*ent.Follow
|
||||
|
||||
URI *lysand.URL
|
||||
FollowerURI *lysand.URL
|
||||
FolloweeURI *lysand.URL
|
||||
}
|
||||
|
||||
func NewFollow(dbFollow *ent.Follow) (*Follow, error) {
|
||||
f := &Follow{Follow: dbFollow}
|
||||
|
||||
var err error
|
||||
|
||||
f.URI, err = lysand.ParseURL(dbFollow.URI)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
f.FollowerURI, err = lysand.ParseURL(dbFollow.Edges.Follower.URI)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
f.FolloweeURI, err = lysand.ParseURL(dbFollow.Edges.Followee.URI)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return f, nil
|
||||
}
|
||||
|
||||
func (f Follow) ToLysand() *lysand.Follow {
|
||||
return &lysand.Follow{
|
||||
Entity: lysand.Entity{
|
||||
ID: f.ID,
|
||||
URI: f.URI,
|
||||
CreatedAt: lysand.TimeFromStd(f.CreatedAt),
|
||||
Extensions: f.Extensions,
|
||||
},
|
||||
Author: f.FollowerURI,
|
||||
Followee: f.FolloweeURI,
|
||||
}
|
||||
}
|
||||
|
||||
func (f Follow) ToLysandAccept() *lysand.FollowAccept {
|
||||
return &lysand.FollowAccept{
|
||||
Entity: lysand.Entity{
|
||||
ID: f.ID,
|
||||
URI: f.URI,
|
||||
CreatedAt: lysand.TimeFromStd(f.CreatedAt),
|
||||
Extensions: f.Extensions,
|
||||
},
|
||||
Author: f.FolloweeURI,
|
||||
Follower: f.FollowerURI,
|
||||
}
|
||||
}
|
||||
|
||||
func (f Follow) ToLysandReject() *lysand.FollowReject {
|
||||
return &lysand.FollowReject{
|
||||
Entity: lysand.Entity{
|
||||
ID: f.ID,
|
||||
URI: f.URI,
|
||||
CreatedAt: lysand.TimeFromStd(f.CreatedAt),
|
||||
Extensions: f.Extensions,
|
||||
},
|
||||
Author: f.FolloweeURI,
|
||||
Follower: f.FollowerURI,
|
||||
}
|
||||
}
|
||||
70
internal/entity/note.go
Normal file
70
internal/entity/note.go
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
package entity
|
||||
|
||||
import (
|
||||
"github.com/lysand-org/versia-go/ent"
|
||||
"github.com/lysand-org/versia-go/pkg/lysand"
|
||||
)
|
||||
|
||||
type Note struct {
|
||||
*ent.Note
|
||||
URI *lysand.URL
|
||||
Content lysand.TextContentTypeMap
|
||||
Author *User
|
||||
Mentions []User
|
||||
MentionURIs []lysand.URL
|
||||
}
|
||||
|
||||
func NewNote(dbNote *ent.Note) (*Note, error) {
|
||||
n := &Note{
|
||||
Note: dbNote,
|
||||
Content: lysand.TextContentTypeMap{
|
||||
"text/plain": lysand.TextContent{Content: dbNote.Content},
|
||||
},
|
||||
Mentions: make([]User, 0, len(dbNote.Edges.Mentions)),
|
||||
MentionURIs: make([]lysand.URL, 0, len(dbNote.Edges.Mentions)),
|
||||
}
|
||||
|
||||
var err error
|
||||
if n.URI, err = lysand.ParseURL(dbNote.URI); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if n.Author, err = NewUser(dbNote.Edges.Author); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, m := range dbNote.Edges.Mentions {
|
||||
u, err := NewUser(m)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
n.Mentions = append(n.Mentions, *u)
|
||||
n.MentionURIs = append(n.MentionURIs, *u.URI)
|
||||
}
|
||||
|
||||
return n, nil
|
||||
}
|
||||
|
||||
func (n Note) ToLysand() lysand.Note {
|
||||
return lysand.Note{
|
||||
Entity: lysand.Entity{
|
||||
ID: n.ID,
|
||||
URI: n.URI,
|
||||
CreatedAt: lysand.TimeFromStd(n.CreatedAt),
|
||||
Extensions: n.Extensions,
|
||||
},
|
||||
Author: n.Author.URI,
|
||||
Content: n.Content,
|
||||
Category: nil,
|
||||
Device: nil,
|
||||
Previews: nil,
|
||||
Group: nil,
|
||||
Attachments: nil,
|
||||
RepliesTo: nil,
|
||||
Quoting: nil,
|
||||
Mentions: n.MentionURIs,
|
||||
Subject: n.Subject,
|
||||
IsSensitive: &n.IsSensitive,
|
||||
Visibility: lysand.PublicationVisibility(n.Visibility),
|
||||
}
|
||||
}
|
||||
139
internal/entity/user.go
Normal file
139
internal/entity/user.go
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
package entity
|
||||
|
||||
import (
|
||||
"github.com/lysand-org/versia-go/internal/helpers"
|
||||
"net/url"
|
||||
|
||||
"github.com/lysand-org/versia-go/ent"
|
||||
"github.com/lysand-org/versia-go/internal/utils"
|
||||
"github.com/lysand-org/versia-go/pkg/lysand"
|
||||
)
|
||||
|
||||
type User struct {
|
||||
*ent.User
|
||||
|
||||
URI *lysand.URL
|
||||
Inbox *lysand.URL
|
||||
Outbox *lysand.URL
|
||||
Featured *lysand.URL
|
||||
Followers *lysand.URL
|
||||
Following *lysand.URL
|
||||
|
||||
DisplayName string
|
||||
LysandAvatar lysand.ImageContentTypeMap
|
||||
LysandBiography lysand.TextContentTypeMap
|
||||
Signer lysand.Signer
|
||||
}
|
||||
|
||||
func NewUser(dbUser *ent.User) (*User, error) {
|
||||
u := &User{User: dbUser}
|
||||
|
||||
u.DisplayName = u.Username
|
||||
if dbUser.DisplayName != nil {
|
||||
u.DisplayName = *dbUser.DisplayName
|
||||
}
|
||||
|
||||
var err error
|
||||
if u.URI, err = lysand.ParseURL(dbUser.URI); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Inbox, err = lysand.ParseURL(dbUser.Inbox); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Outbox, err = lysand.ParseURL(dbUser.Outbox); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Featured, err = lysand.ParseURL(dbUser.Featured); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Followers, err = lysand.ParseURL(dbUser.Followers); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if u.Following, err = lysand.ParseURL(dbUser.Following); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
u.LysandAvatar = lysandAvatar(dbUser)
|
||||
u.LysandBiography = lysandBiography(dbUser)
|
||||
u.Signer = lysand.Signer{
|
||||
PrivateKey: dbUser.PrivateKey,
|
||||
UserURL: u.URI.ToStd(),
|
||||
}
|
||||
|
||||
return u, nil
|
||||
}
|
||||
|
||||
func (u User) ToLysand() *lysand.User {
|
||||
return &lysand.User{
|
||||
Entity: lysand.Entity{
|
||||
ID: u.ID,
|
||||
URI: u.URI,
|
||||
CreatedAt: lysand.TimeFromStd(u.CreatedAt),
|
||||
Extensions: u.Extensions,
|
||||
},
|
||||
DisplayName: helpers.StringPtr(u.DisplayName),
|
||||
Username: u.Username,
|
||||
Avatar: u.LysandAvatar,
|
||||
Header: imageMap(u.Edges.HeaderImage),
|
||||
Indexable: u.Indexable,
|
||||
PublicKey: lysand.PublicKey{
|
||||
Actor: utils.UserAPIURL(u.ID),
|
||||
PublicKey: lysand.SPKIPublicKey(u.PublicKey),
|
||||
},
|
||||
Bio: u.LysandBiography,
|
||||
Fields: u.Fields,
|
||||
|
||||
Inbox: u.Inbox,
|
||||
Outbox: u.Outbox,
|
||||
Featured: u.Featured,
|
||||
Followers: u.Followers,
|
||||
Following: u.Following,
|
||||
|
||||
// TODO: Remove these, they got deprecated and moved into an extension
|
||||
Likes: utils.UserLikesAPIURL(u.ID),
|
||||
Dislikes: utils.UserDislikesAPIURL(u.ID),
|
||||
}
|
||||
}
|
||||
|
||||
func lysandAvatar(u *ent.User) lysand.ImageContentTypeMap {
|
||||
if avatar := imageMap(u.Edges.AvatarImage); avatar != nil {
|
||||
return avatar
|
||||
}
|
||||
|
||||
return lysand.ImageContentTypeMap{
|
||||
"image/svg+xml": lysand.ImageContent{
|
||||
Content: utils.DefaultAvatarURL(u.ID),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func lysandBiography(u *ent.User) lysand.TextContentTypeMap {
|
||||
if u.Biography == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// TODO: Render HTML
|
||||
|
||||
return lysand.TextContentTypeMap{
|
||||
"text/html": lysand.TextContent{
|
||||
Content: *u.Biography,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func imageMap(i *ent.Image) lysand.ImageContentTypeMap {
|
||||
if i == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
u, err := url.Parse(i.URL)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return lysand.ImageContentTypeMap{
|
||||
i.MimeType: {
|
||||
Content: (*lysand.URL)(u),
|
||||
},
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue