Initial open source release
This commit is contained in:
commit
74992e893f
377 changed files with 118084 additions and 0 deletions
93
internal/store/postgres/authorization.go
Normal file
93
internal/store/postgres/authorization.go
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
package postgres
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/jackc/pgx/v5"
|
||||
|
||||
"telesrv/internal/domain"
|
||||
"telesrv/internal/store/postgres/sqlcgen"
|
||||
)
|
||||
|
||||
// AuthorizationStore 用 PostgreSQL 实现 store.AuthorizationStore。
|
||||
type AuthorizationStore struct {
|
||||
q *sqlcgen.Queries
|
||||
}
|
||||
|
||||
// NewAuthorizationStore 基于 pgx 连接池(或事务)创建 AuthorizationStore。
|
||||
func NewAuthorizationStore(db sqlcgen.DBTX) *AuthorizationStore {
|
||||
return &AuthorizationStore{q: sqlcgen.New(db)}
|
||||
}
|
||||
|
||||
func (s *AuthorizationStore) Bind(ctx context.Context, a domain.Authorization) error {
|
||||
if err := s.q.UpsertAuthorization(ctx, sqlcgen.UpsertAuthorizationParams{
|
||||
AuthKeyID: authKeyIDToInt64(a.AuthKeyID),
|
||||
UserID: a.UserID,
|
||||
Layer: int32(a.Layer),
|
||||
DeviceModel: a.DeviceModel,
|
||||
Platform: a.Platform,
|
||||
SystemVersion: a.SystemVersion,
|
||||
ApiID: int32(a.APIID),
|
||||
AppVersion: a.AppVersion,
|
||||
Ip: a.IP,
|
||||
}); err != nil {
|
||||
return fmt.Errorf("upsert authorization: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *AuthorizationStore) ByAuthKey(ctx context.Context, id [8]byte) (domain.Authorization, bool, error) {
|
||||
row, err := s.q.GetAuthorizationByAuthKey(ctx, authKeyIDToInt64(id))
|
||||
if err != nil {
|
||||
if errors.Is(err, pgx.ErrNoRows) {
|
||||
return domain.Authorization{}, false, nil
|
||||
}
|
||||
return domain.Authorization{}, false, fmt.Errorf("get authorization: %w", err)
|
||||
}
|
||||
return domain.Authorization{
|
||||
AuthKeyID: id,
|
||||
UserID: row.UserID,
|
||||
Layer: int(row.Layer),
|
||||
DeviceModel: row.DeviceModel,
|
||||
Platform: row.Platform,
|
||||
SystemVersion: row.SystemVersion,
|
||||
APIID: int(row.ApiID),
|
||||
AppVersion: row.AppVersion,
|
||||
IP: row.Ip,
|
||||
}, true, nil
|
||||
}
|
||||
|
||||
func (s *AuthorizationStore) ListByUser(ctx context.Context, userID int64) ([]domain.Authorization, error) {
|
||||
rows, err := s.q.ListAuthorizationsByUser(ctx, userID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("list authorizations by user: %w", err)
|
||||
}
|
||||
out := make([]domain.Authorization, 0, len(rows))
|
||||
for _, row := range rows {
|
||||
out = append(out, authorizationFromRow(row))
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (s *AuthorizationStore) Delete(ctx context.Context, id [8]byte) error {
|
||||
if err := s.q.DeleteAuthorization(ctx, authKeyIDToInt64(id)); err != nil {
|
||||
return fmt.Errorf("delete authorization: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func authorizationFromRow(row sqlcgen.Authorization) domain.Authorization {
|
||||
return domain.Authorization{
|
||||
AuthKeyID: authKeyIDFromInt64(row.AuthKeyID),
|
||||
UserID: row.UserID,
|
||||
Layer: int(row.Layer),
|
||||
DeviceModel: row.DeviceModel,
|
||||
Platform: row.Platform,
|
||||
SystemVersion: row.SystemVersion,
|
||||
APIID: int(row.ApiID),
|
||||
AppVersion: row.AppVersion,
|
||||
IP: row.Ip,
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue