feat: init

This commit is contained in:
Anatoly Antonov 2025-03-26 15:07:12 +03:00 committed by Anatoliy Antonov
parent 7688020b52
commit 6302dd62d6
33 changed files with 6027 additions and 0 deletions

View file

@ -0,0 +1,22 @@
package repository
import (
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
)
func UUIDToPg(in uuid.UUID) pgtype.UUID {
if in == uuid.Nil {
return pgtype.UUID{}
}
return pgtype.UUID{Bytes: in, Valid: true}
}
func PGToUUID(in pgtype.UUID) uuid.UUID {
if !in.Valid {
return uuid.Nil
}
return in.Bytes
}

View file

@ -0,0 +1,29 @@
create table users (
id uuid primary key,
login text not null
);
create type status as enum ('active', 'offline', 'busy');
create table stations (
id uuid primary key,
slug text not null,
status status not null
);
create table satellites (
id uuid primary key,
display_name text not null,
status status not null
);
create table subscriptions (
id uuid primary key,
user_id uuid not null references users(id),
station_id uuid null references satellites(id),
satellite_id uuid null references stations(id),
created_at timestamp not null,
updated_at timestamp not null,
check (station_id is not null or satellite_id is not null)
);

View file

@ -0,0 +1,4 @@
-- name: GetStationByID :one
select *
from stations
where id = @id;

View file

@ -0,0 +1,26 @@
package repository
import (
"context"
"git.intra.yksa.space/gsn/gsn-proxy/internal/ds"
"git.intra.yksa.space/gsn/gsn-proxy/internal/repository/sqlc"
"github.com/google/uuid"
)
type Repository struct {
queries *sqlc.Queries
}
func (r *Repository) GetStationByID(ctx context.Context, ID uuid.UUID) (ds.Station, error) {
ret, err := r.queries.GetStationByID(ctx, UUIDToPg(ID))
if err != nil {
return ds.Station{}, err
}
return ds.Station{
ID: PGToUUID(ret.ID),
Slug: ret.Slug,
Status: ds.Status(ret.Status),
}, nil
}

View file

@ -0,0 +1,32 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.28.0
package sqlc
import (
"context"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgconn"
)
type DBTX interface {
Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
Query(context.Context, string, ...interface{}) (pgx.Rows, error)
QueryRow(context.Context, string, ...interface{}) pgx.Row
}
func New(db DBTX) *Queries {
return &Queries{db: db}
}
type Queries struct {
db DBTX
}
func (q *Queries) WithTx(tx pgx.Tx) *Queries {
return &Queries{
db: tx,
}
}

View file

@ -0,0 +1,81 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.28.0
package sqlc
import (
"database/sql/driver"
"fmt"
"github.com/jackc/pgx/v5/pgtype"
)
type Status string
const (
StatusActive Status = "active"
StatusOffline Status = "offline"
StatusBusy Status = "busy"
)
func (e *Status) Scan(src interface{}) error {
switch s := src.(type) {
case []byte:
*e = Status(s)
case string:
*e = Status(s)
default:
return fmt.Errorf("unsupported scan type for Status: %T", src)
}
return nil
}
type NullStatus struct {
Status Status
Valid bool // Valid is true if Status is not NULL
}
// Scan implements the Scanner interface.
func (ns *NullStatus) Scan(value interface{}) error {
if value == nil {
ns.Status, ns.Valid = "", false
return nil
}
ns.Valid = true
return ns.Status.Scan(value)
}
// Value implements the driver Valuer interface.
func (ns NullStatus) Value() (driver.Value, error) {
if !ns.Valid {
return nil, nil
}
return string(ns.Status), nil
}
type Satellite struct {
ID pgtype.UUID
DisplayName string
Status Status
}
type Station struct {
ID pgtype.UUID
Slug string
Status Status
}
type Subscription struct {
ID pgtype.UUID
UserID pgtype.UUID
StationID pgtype.UUID
SatelliteID pgtype.UUID
CreatedAt pgtype.Timestamp
UpdatedAt pgtype.Timestamp
}
type User struct {
ID pgtype.UUID
Login string
}

View file

@ -0,0 +1,25 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.28.0
// source: queries.sql
package sqlc
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
)
const getStationByID = `-- name: GetStationByID :one
select id, slug, status
from stations
where id = $1
`
func (q *Queries) GetStationByID(ctx context.Context, id pgtype.UUID) (Station, error) {
row := q.db.QueryRow(ctx, getStationByID, id)
var i Station
err := row.Scan(&i.ID, &i.Slug, &i.Status)
return i, err
}