mirror of
https://github.com/openziti/zrok.git
synced 2026-08-28 02:34:14 -05:00
91 lines
3.3 KiB
Go
91 lines
3.3 KiB
Go
package store
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type FrontendMapping struct {
|
|
Id int64
|
|
FrontendToken string
|
|
Name string
|
|
ShareToken string
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
type FrontendMappingWithShareState struct {
|
|
FrontendMapping
|
|
ShareDeleted *bool `db:"share_deleted"`
|
|
}
|
|
|
|
func (str *Store) CreateFrontendMapping(fm *FrontendMapping, trx *sqlx.Tx) (int, error) {
|
|
stmt, err := trx.Prepare("insert into frontend_mappings (frontend_token, name, share_token) values ($1, $2, $3) returning id")
|
|
if err != nil {
|
|
return 0, errors.Wrap(err, "error preparing frontend_mappings insert statement")
|
|
}
|
|
var id int
|
|
if err := stmt.QueryRow(fm.FrontendToken, fm.Name, fm.ShareToken).Scan(&id); err != nil {
|
|
return 0, errors.Wrap(err, "error executing frontend_mappings insert statement")
|
|
}
|
|
return id, nil
|
|
}
|
|
|
|
func (str *Store) DeleteFrontendMappingsByFrontendTokenAndName(frontendToken, name string, trx *sqlx.Tx) error {
|
|
stmt, err := trx.Prepare("delete from frontend_mappings where frontend_token = $1 and name = $2")
|
|
if err != nil {
|
|
return errors.Wrap(err, "error preparing frontend_mappings delete by frontend_token and name statement")
|
|
}
|
|
if _, err := stmt.Exec(frontendToken, name); err != nil {
|
|
return errors.Wrap(err, "error executing frontend_mappings delete by frontend_token and name statement")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (str *Store) FindFrontendMappingByFrontendTokenAndNameWithShareState(frontendToken, name string, trx *sqlx.Tx) (*FrontendMappingWithShareState, error) {
|
|
sql := `select fm.id, fm.frontend_token, fm.name, fm.share_token, fm.created_at,
|
|
s.deleted as share_deleted
|
|
from frontend_mappings fm
|
|
left join shares s on fm.share_token = s.token
|
|
where fm.frontend_token = $1 and fm.name = $2`
|
|
|
|
mapping := &FrontendMappingWithShareState{}
|
|
if err := trx.QueryRowx(sql, frontendToken, name).StructScan(mapping); err != nil {
|
|
return nil, errors.Wrap(err, "error selecting frontend mapping by frontend token and name with share state")
|
|
}
|
|
return mapping, nil
|
|
}
|
|
|
|
func (str *Store) FindFrontendMappingsWithHigherId(frontendToken, name string, id int64, trx *sqlx.Tx) ([]*FrontendMapping, error) {
|
|
rows, err := trx.Queryx("select * from frontend_mappings where frontend_token = $1 and name = $2 and id > $3 order by id asc", frontendToken, name, id)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "error selecting frontend mappings with id or higher")
|
|
}
|
|
var mappings []*FrontendMapping
|
|
for rows.Next() {
|
|
fm := &FrontendMapping{}
|
|
if err := rows.StructScan(fm); err != nil {
|
|
return nil, errors.Wrap(err, "error scanning frontend mapping")
|
|
}
|
|
mappings = append(mappings, fm)
|
|
}
|
|
return mappings, nil
|
|
}
|
|
|
|
func (str *Store) FindFrontendMappingsByFrontendTokenWithHigherId(frontendToken string, id int64, trx *sqlx.Tx) ([]*FrontendMapping, error) {
|
|
rows, err := trx.Queryx("select * from frontend_mappings where frontend_token = $1 and id > $2 order by name, id asc", frontendToken, id)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "error selecting frontend mappings by frontend_token with id or higher")
|
|
}
|
|
var mappings []*FrontendMapping
|
|
for rows.Next() {
|
|
fm := &FrontendMapping{}
|
|
if err := rows.StructScan(fm); err != nil {
|
|
return nil, errors.Wrap(err, "error scanning frontend mapping")
|
|
}
|
|
mappings = append(mappings, fm)
|
|
}
|
|
return mappings, nil
|
|
}
|