108 lines
3.0 KiB
Go
108 lines
3.0 KiB
Go
|
package grpc
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"git.solsynth.dev/hydrogen/passport/pkg/database"
|
||
|
"git.solsynth.dev/hydrogen/passport/pkg/grpc/proto"
|
||
|
"git.solsynth.dev/hydrogen/passport/pkg/models"
|
||
|
"git.solsynth.dev/hydrogen/passport/pkg/services"
|
||
|
"github.com/samber/lo"
|
||
|
"google.golang.org/protobuf/types/known/emptypb"
|
||
|
)
|
||
|
|
||
|
func (v *Server) ListCommunityRealm(ctx context.Context, empty *emptypb.Empty) (*proto.ListRealmResponse, error) {
|
||
|
realms, err := services.ListCommunityRealm()
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return &proto.ListRealmResponse{
|
||
|
Data: lo.Map(realms, func(item models.Realm, index int) *proto.RealmResponse {
|
||
|
return &proto.RealmResponse{
|
||
|
Alias: item.Alias,
|
||
|
Name: item.Name,
|
||
|
Description: item.Description,
|
||
|
IsPublic: item.IsPublic,
|
||
|
IsCommunity: item.IsCommunity,
|
||
|
}
|
||
|
}),
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func (v *Server) ListAvailableRealm(ctx context.Context, request *proto.RealmLookupWithUserRequest) (*proto.ListRealmResponse, error) {
|
||
|
account, err := services.GetAccount(uint(request.GetUserId()))
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("unable to find target account: %v", err)
|
||
|
}
|
||
|
realms, err := services.ListAvailableRealm(account)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return &proto.ListRealmResponse{
|
||
|
Data: lo.Map(realms, func(item models.Realm, index int) *proto.RealmResponse {
|
||
|
return &proto.RealmResponse{
|
||
|
Alias: item.Alias,
|
||
|
Name: item.Name,
|
||
|
Description: item.Description,
|
||
|
IsPublic: item.IsPublic,
|
||
|
IsCommunity: item.IsCommunity,
|
||
|
}
|
||
|
}),
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func (v *Server) ListOwnedRealm(ctx context.Context, request *proto.RealmLookupWithUserRequest) (*proto.ListRealmResponse, error) {
|
||
|
account, err := services.GetAccount(uint(request.GetUserId()))
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("unable to find target account: %v", err)
|
||
|
}
|
||
|
realms, err := services.ListOwnedRealm(account)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return &proto.ListRealmResponse{
|
||
|
Data: lo.Map(realms, func(item models.Realm, index int) *proto.RealmResponse {
|
||
|
return &proto.RealmResponse{
|
||
|
Alias: item.Alias,
|
||
|
Name: item.Name,
|
||
|
Description: item.Description,
|
||
|
IsPublic: item.IsPublic,
|
||
|
IsCommunity: item.IsCommunity,
|
||
|
}
|
||
|
}),
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func (v *Server) GetRealm(ctx context.Context, request *proto.RealmLookupRequest) (*proto.RealmResponse, error) {
|
||
|
var realm models.Realm
|
||
|
|
||
|
tx := database.C.Model(&models.Realm{})
|
||
|
if request.Id != nil {
|
||
|
tx = tx.Where("id = ?", request.GetId())
|
||
|
}
|
||
|
if request.Alias != nil {
|
||
|
tx = tx.Where("alias = ?", request.GetAlias())
|
||
|
}
|
||
|
if request.IsPublic != nil {
|
||
|
tx = tx.Where("is_public = ?", request.GetIsPublic())
|
||
|
}
|
||
|
if request.IsCommunity != nil {
|
||
|
tx = tx.Where("is_community = ?", request.GetIsCommunity())
|
||
|
}
|
||
|
|
||
|
if err := tx.First(&realm).Error; err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return &proto.RealmResponse{
|
||
|
Alias: realm.Alias,
|
||
|
Name: realm.Name,
|
||
|
Description: realm.Description,
|
||
|
IsPublic: realm.IsPublic,
|
||
|
IsCommunity: realm.IsCommunity,
|
||
|
}, nil
|
||
|
}
|