Initial CPONE middleware implementation

This commit is contained in:
2026-08-18 13:41:38 +07:00
commit 676d930561
17 changed files with 1000 additions and 0 deletions

31
internal/db/db.go Normal file
View File

@@ -0,0 +1,31 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
package db
import (
"context"
"database/sql"
)
type DBTX interface {
ExecContext(context.Context, string, ...interface{}) (sql.Result, error)
PrepareContext(context.Context, string) (*sql.Stmt, error)
QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error)
QueryRowContext(context.Context, string, ...interface{}) *sql.Row
}
func New(db DBTX) *Queries {
return &Queries{db: db}
}
type Queries struct {
db DBTX
}
func (q *Queries) WithTx(tx *sql.Tx) *Queries {
return &Queries{
db: tx,
}
}

39
internal/db/models.go Normal file
View File

@@ -0,0 +1,39 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
package db
import (
"database/sql"
)
type HargaLayanan10 struct {
Hargalayananid int64 `json:"hargalayananid"`
Layanandepartemenid sql.NullInt64 `json:"layanandepartemenid"`
Kelasid sql.NullString `json:"kelasid"`
Na sql.NullString `json:"na"`
Harga sql.NullString `json:"harga"`
Sharetipe sql.NullString `json:"sharetipe"`
Sharedokter sql.NullString `json:"sharedokter"`
Sharers sql.NullString `json:"sharers"`
Shareexternal sql.NullString `json:"shareexternal"`
Sharelain sql.NullString `json:"sharelain"`
}
type Jenislayanan struct {
Jenislayananid int64 `json:"jenislayananid"`
Nama sql.NullString `json:"nama"`
}
type Layanandeparteman struct {
Layanandepartemenid int64 `json:"layanandepartemenid"`
Layananid sql.NullString `json:"layananid"`
Na sql.NullString `json:"na"`
}
type Masterlayanan struct {
Layananid string `json:"layananid"`
Nama sql.NullString `json:"nama"`
Jenislayananid sql.NullInt64 `json:"jenislayananid"`
}

135
internal/db/query.sql.go Normal file
View File

@@ -0,0 +1,135 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
// source: query.sql
package db
import (
"context"
"database/sql"
"strings"
)
const mappingHargaPeriode10 = `-- name: MappingHargaPeriode10 :many
SELECT
tarif.HargaLayananID AS TarifLayananID,
layanan_dept.LayananID,
layanan.Nama AS NamaLayanan,
layanan.JenisLayananID,
jenis.Nama AS NamaJenisLayanan,
'Default' AS Kelas,
'Default' AS NamaKelas,
tarif.Harga,
'Percentage' AS TipeDiskonRJ,
'0.00' AS DiskonRJ,
'Percentage' AS TipeDiskonRI,
'0.00' AS DiskonRI,
tarif.ShareTipe AS TipeShare,
tarif.ShareDokter,
tarif.ShareRS,
tarif.ShareExternal AS ShareExt,
tarif.ShareLain,
'+Layanan' AS AsalTarif
FROM layanandepartemen AS layanan_dept
INNER JOIN harga_layanan_10 AS tarif
ON tarif.LayananDepartemenID = layanan_dept.LayananDepartemenID
AND tarif.KelasID = 'Default'
AND tarif.NA = 'N'
LEFT JOIN masterlayanan AS layanan
ON layanan.LayananID = layanan_dept.LayananID
LEFT JOIN jenislayanan AS jenis
ON jenis.JenisLayananID = layanan.JenisLayananID
WHERE layanan_dept.NA = 'N'
AND layanan_dept.LayananID IN (/*SLICE:layanan_ids*/?)
AND (
? IS NULL
OR layanan_dept.LayananID LIKE ?
OR layanan.Nama LIKE ?
)
ORDER BY layanan.Nama, layanan.JenisLayananID
`
type MappingHargaPeriode10Params struct {
LayananIds []sql.NullString `json:"layanan_ids"`
Search sql.NullString `json:"search"`
}
type MappingHargaPeriode10Row struct {
Tariflayananid int64 `json:"tariflayananid"`
Layananid sql.NullString `json:"layananid"`
Namalayanan sql.NullString `json:"namalayanan"`
Jenislayananid sql.NullInt64 `json:"jenislayananid"`
Namajenislayanan sql.NullString `json:"namajenislayanan"`
Kelas string `json:"kelas"`
Namakelas string `json:"namakelas"`
Harga sql.NullString `json:"harga"`
Tipediskonrj string `json:"tipediskonrj"`
Diskonrj string `json:"diskonrj"`
Tipediskonri string `json:"tipediskonri"`
Diskonri string `json:"diskonri"`
Tipeshare sql.NullString `json:"tipeshare"`
Sharedokter sql.NullString `json:"sharedokter"`
Sharers sql.NullString `json:"sharers"`
Shareext sql.NullString `json:"shareext"`
Sharelain sql.NullString `json:"sharelain"`
Asaltarif string `json:"asaltarif"`
}
// sqlc does not support dynamic table identifiers. This query is a generation
// template for one concrete period table; duplicate or generate per period as
// needed, then keep the HTTP response mapping unchanged.
func (q *Queries) MappingHargaPeriode10(ctx context.Context, arg MappingHargaPeriode10Params) ([]MappingHargaPeriode10Row, error) {
query := mappingHargaPeriode10
var queryParams []interface{}
if len(arg.LayananIds) > 0 {
for _, v := range arg.LayananIds {
queryParams = append(queryParams, v)
}
query = strings.Replace(query, "/*SLICE:layanan_ids*/?", strings.Repeat(",?", len(arg.LayananIds))[1:], 1)
} else {
query = strings.Replace(query, "/*SLICE:layanan_ids*/?", "NULL", 1)
}
queryParams = append(queryParams, arg.Search)
queryParams = append(queryParams, arg.Search)
queryParams = append(queryParams, arg.Search)
rows, err := q.db.QueryContext(ctx, query, queryParams...)
if err != nil {
return nil, err
}
defer rows.Close()
var items []MappingHargaPeriode10Row
for rows.Next() {
var i MappingHargaPeriode10Row
if err := rows.Scan(
&i.Tariflayananid,
&i.Layananid,
&i.Namalayanan,
&i.Jenislayananid,
&i.Namajenislayanan,
&i.Kelas,
&i.Namakelas,
&i.Harga,
&i.Tipediskonrj,
&i.Diskonrj,
&i.Tipediskonri,
&i.Diskonri,
&i.Tipeshare,
&i.Sharedokter,
&i.Sharers,
&i.Shareext,
&i.Sharelain,
&i.Asaltarif,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}