Compare commits

...

5 Commits

Author SHA1 Message Date
Sas Andy
49c80c912b Merge branch 'andy/table' of https://devone.aplikasi.web.id/gitea/andy/corporate_portal_westerindo into andy/table 2024-05-13 14:41:22 +07:00
Sas Andy
65d54eb7a1 coba pagination 2024-05-13 14:39:06 +07:00
Sas Andy
93186320d7 clear store 2024-05-13 14:35:40 +07:00
Sas Andy
1a4f1ee2d6 revisi db & logger 2024-05-13 14:23:26 +07:00
Sas Andy
f757652e96 config & db 2024-05-13 14:22:58 +07:00
21 changed files with 318 additions and 243 deletions

3
.gitignore vendored
View File

@@ -1,2 +1,3 @@
tmp
bin
bin
config.yaml

View File

@@ -3,23 +3,53 @@ package main
import (
"cpone/db"
"cpone/handlers"
"time"
"cpone/package/config"
"cpone/package/database"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"go.uber.org/zap"
)
// In production, the name of the database
// would be obtained from an .env file
const dbName = "user_data.db"
func main() {
config.Load()
app := echo.New()
database.InitDB()
app.HTTPErrorHandler = handlers.CustomHTTPErrorHandler
app.Static("/", "assets")
app.Use(middleware.Logger())
appStore, err := db.NewAppStore(dbName)
// app.Use(middleware.Logger())
logger, _ := zap.NewProduction()
app.Use(middleware.RequestLoggerWithConfig(
middleware.RequestLoggerConfig{
LogURI: true,
LogStatus: true,
LogValuesFunc: func(c echo.Context, v middleware.RequestLoggerValues) error {
logger.Info("request",
zap.String("URI", v.URI),
zap.Int("status", v.Status),
zap.Duration("Duration", v.Latency),
zap.Any("date", time.Now().String()),
)
return nil
},
},
))
app.Use(middleware.CORSWithConfig(
middleware.CORSConfig{
AllowOrigins: []string{"*"},
AllowMethods: []string{"*"},
},
))
appStore, err := db.NewAppStore(database.Handle)
if err != nil {
app.Logger.Fatalf("failed to create store: %s", err)
}

24
config.template.yaml Normal file
View File

@@ -0,0 +1,24 @@
secretkey: 7A25432A462D4A614E645267556B5870
privatekey: /home/his/backend/internal/auth/keys/private.pem
hashCost: 9
dbuser: root
dbpass:
dbhost: localhost
dbport: 3306
dbname: his
tokenExpiration: 120
dbsequser: root
dbseqpass:
dbseqhost: localhost
dbseqport: 3306
dbseqname: his_seq
photo: /home/ubuntu/photo-folder-location/
# temporary param
invoice_prefix: RSPAD
vclaimProviderCode: 0901R003
vclaimConsID: 6057
vclaimSecretKey: rspad211016
vclaimUserKey: 32e99aefa0866a5880067b27d151c3e4
vclaimBaseURL: https://apijkn-dev.bpjs-kesehatan.go.id/vclaim-rest-dev
vclaimAntreanBaseURL: https://apijkn-dev.bpjs-kesehatan.go.id/antreanrs_dev

View File

@@ -1,43 +0,0 @@
package db
import (
"database/sql"
_ "github.com/glebarez/go-sqlite"
)
type PieChartStore struct {
Db *sql.DB
}
type BarChartStore struct {
Db *sql.DB
}
func NewPieChartStore(dbName string) (PieChartStore, error) {
Db, err := getConnection(dbName)
if err != nil {
return PieChartStore{}, err
}
if err := createMigrations(dbName, Db); err != nil {
return PieChartStore{}, err
}
return PieChartStore{
Db,
}, nil
}
func NewBarChartStore(dbName string) (BarChartStore, error) {
Db, err := getConnection(dbName)
if err != nil {
return BarChartStore{}, err
}
if err := createMigrations(dbName, Db); err != nil {
return BarChartStore{}, err
}
return BarChartStore{
Db,
}, nil
}

View File

@@ -2,8 +2,6 @@ package db
import (
"database/sql"
"fmt"
"log"
_ "github.com/glebarez/go-sqlite"
)
@@ -12,51 +10,9 @@ type AppStore struct {
Db *sql.DB
}
func NewAppStore(dbName string) (AppStore, error) {
Db, err := getConnection(dbName)
if err != nil {
return AppStore{}, err
}
func NewAppStore(db *sql.DB) (AppStore, error) {
return AppStore{
Db,
db,
}, nil
}
func getConnection(dbName string) (*sql.DB, error) {
var (
err error
db *sql.DB
)
if db != nil {
return db, nil
}
// Init SQLite3 database
db, err = sql.Open("sqlite", dbName)
if err != nil {
// log.Fatalf("🔥 failed to connect to the database: %s", err.Error())
return nil, fmt.Errorf("🔥 failed to connect to the database: %s", err)
}
log.Println("🚀 Connected Successfully to the Database")
return db, nil
}
func createMigrations(dbName string, db *sql.DB) error {
stmt := `CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username VARCHAR(64) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
created_at DATETIME default CURRENT_TIMESTAMP
);`
_, err := db.Exec(stmt)
if err != nil {
return err
}
return nil
}

View File

@@ -1,26 +0,0 @@
package db
import (
"database/sql"
_ "github.com/glebarez/go-sqlite"
)
type EmployeeStore struct {
Db *sql.DB
}
func NewEmployeeStore(dbName string) (EmployeeStore, error) {
Db, err := getConnection(dbName)
if err != nil {
return EmployeeStore{}, err
}
if err := createMigrations(dbName, Db); err != nil {
return EmployeeStore{}, err
}
return EmployeeStore{
Db,
}, nil
}

View File

@@ -1,26 +0,0 @@
package db
import (
"database/sql"
_ "github.com/glebarez/go-sqlite"
)
type LandingPageStore struct {
Db *sql.DB
}
func NewLandingPageStore(dbName string) (LandingPageStore, error) {
Db, err := getConnection(dbName)
if err != nil {
return LandingPageStore{}, err
}
if err := createMigrations(dbName, Db); err != nil {
return LandingPageStore{}, err
}
return LandingPageStore{
Db,
}, nil
}

View File

@@ -1,26 +0,0 @@
package db
import (
"database/sql"
_ "github.com/glebarez/go-sqlite"
)
type LoginStore struct {
Db *sql.DB
}
func NewLoginStore(dbName string) (LoginStore, error) {
Db, err := getConnection(dbName)
if err != nil {
return LoginStore{}, err
}
if err := createMigrations(dbName, Db); err != nil {
return LoginStore{}, err
}
return LoginStore{
Db,
}, nil
}

View File

@@ -1,26 +0,0 @@
package db
import (
"database/sql"
_ "github.com/glebarez/go-sqlite"
)
type MasterMenuUserGroupStore struct {
Db *sql.DB
}
func NewMasterMenuUserGroupStore(dbName string) (MasterMenuUserGroupStore, error) {
Db, err := getConnection(dbName)
if err != nil {
return MasterMenuUserGroupStore{}, err
}
if err := createMigrations(dbName, Db); err != nil {
return MasterMenuUserGroupStore{}, err
}
return MasterMenuUserGroupStore{
Db,
}, nil
}

View File

@@ -1,26 +0,0 @@
package db
import (
"database/sql"
_ "github.com/glebarez/go-sqlite"
)
type XsampleStore struct {
Db *sql.DB
}
func NewXsampleStore(dbName string) (XsampleStore, error) {
Db, err := getConnection(dbName)
if err != nil {
return XsampleStore{}, err
}
if err := createMigrations(dbName, Db); err != nil {
return XsampleStore{}, err
}
return XsampleStore{
Db,
}, nil
}

35
go.mod
View File

@@ -5,24 +5,47 @@ go 1.21.0
require (
github.com/a-h/templ v0.2.663
github.com/glebarez/go-sqlite v1.22.0
github.com/labstack/echo/v4 v4.11.3
github.com/labstack/echo/v4 v4.12.0
golang.org/x/text v0.14.0
)
require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-sql-driver/mysql v1.8.1 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.11.0 // indirect
github.com/spf13/cast v1.6.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.18.2 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
go.uber.org/multierr v1.10.0 // indirect
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
require (
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
github.com/google/uuid v1.5.0 // indirect
github.com/labstack/gommon v0.4.0 // indirect
github.com/labstack/gommon v0.4.2 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasttemplate v1.2.2 // indirect
golang.org/x/crypto v0.16.0 // indirect
golang.org/x/net v0.19.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/time v0.3.0 // indirect
go.uber.org/zap v1.27.0
golang.org/x/crypto v0.22.0 // indirect
golang.org/x/net v0.24.0 // indirect
golang.org/x/sys v0.19.0 // indirect
golang.org/x/time v0.5.0 // indirect
modernc.org/libc v1.37.6 // indirect
modernc.org/mathutil v1.6.0 // indirect
modernc.org/memory v1.7.2 // indirect

54
go.sum
View File

@@ -1,3 +1,5 @@
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/a-h/templ v0.2.663 h1:aa0WMm27InkYHGjimcM7us6hJ6BLhg98ZbfaiDPyjHE=
github.com/a-h/templ v0.2.663/go.mod h1:SA7mtYwVEajbIXFRh3vKdYm/4FYyLQAtPH1+KxzGPA8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -5,8 +7,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ=
github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
@@ -15,10 +21,18 @@ github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbu
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/labstack/echo/v4 v4.11.3 h1:Upyu3olaqSHkCjs1EJJwQ3WId8b8b1hxbogyommKktM=
github.com/labstack/echo/v4 v4.11.3/go.mod h1:UcGuQ8V6ZNRmSweBIJkPvGfwCMIlFmiqrPqiEBfPYws=
github.com/labstack/echo/v4 v4.12.0 h1:IKpw49IMryVB2p1a4dzwlhP1O2Tf2E0Ir/450lH+kI0=
github.com/labstack/echo/v4 v4.12.0/go.mod h1:UP9Cr2DJXbOK3Kr9ONYzNowSh7HP0aG0ShAyycHSJvM=
github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8=
github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
@@ -26,23 +40,57 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -50,11 +98,17 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

View File

@@ -3,9 +3,9 @@ package public_handlers
import (
public_services "cpone/services/public"
public_landingpage "cpone/views/public/landingpage"
"fmt"
"github.com/a-h/templ"
"go.uber.org/zap"
"github.com/labstack/echo/v4"
)
@@ -47,7 +47,15 @@ func (uh *LandingPageHandler) ShowLandingPage(c echo.Context) error {
if err != nil {
return err
}
fmt.Printf("%+v\n", udata)
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("User registration successful",
zap.String("username", "john_doe"),
zap.Int("id", 12345),
zap.Any("data", udata),
)
// fmt.Printf("%+v\n", udata)
helo := public_landingpage.ShowLandingPage("Hello World",
public_landingpage.MainLandingPage(public_landingpage.ListMedicalService(udata),
public_landingpage.ListAdvantage(adData), public_landingpage.ListPromotion(lpData),

View File

@@ -179,6 +179,10 @@ func SetupRoutesClient(app *echo.Echo, appStore db.AppStore) {
func SetupRoutesDev(app *echo.Echo, appStore db.AppStore) {
dev := app.Group("/dev")
dvlpserv := dev_services.NewServicesLandingPage(appStore)
devlphan := dev_handlers.NewLandingPageHandler(dvlpserv)
dev.GET("/landingpage", devlphan.ShowLandingPage)
devUGServices := dev_services.NewServicesMasterMenuUserGroup(appStore)
devUGhandlers := dev_handlers.NewMasterMenuUserGroupHandler(devUGServices)
dev.GET("/usergroup", devUGhandlers.HandlerShowMasterMenuUserGroup)

53
package/config/config.go Normal file
View File

@@ -0,0 +1,53 @@
package config
import (
"log"
"github.com/fsnotify/fsnotify"
"github.com/spf13/viper"
"go.uber.org/zap"
)
type Reader interface {
Get(key string) string
}
type viperConfigReader struct {
viper *viper.Viper
}
var Data *viperConfigReader
func (v viperConfigReader) Get(key string) string {
return v.viper.GetString(key)
}
func (v viperConfigReader) GetInt(key string) int {
return v.viper.GetInt(key)
}
func Load() {
v := viper.New()
v.AddConfigPath(".")
v.SetConfigName("config")
v.SetConfigType("yaml")
v.AutomaticEnv()
err := v.ReadInConfig()
if err != nil {
return
}
Data = &viperConfigReader{
viper: v,
}
v.WatchConfig()
v.OnConfigChange(func(e fsnotify.Event) {
log.Println("config file changed", e.Name)
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("Config file change",
zap.String("name", e.Name),
)
})
return
}

View File

@@ -0,0 +1,95 @@
package database
import (
"bytes"
"database/sql"
"fmt"
"log"
"strings"
"cpone/package/config"
_ "github.com/go-sql-driver/mysql"
)
var Handle *sql.DB
var HandleSeq *sql.DB
func InitDB() {
println(config.Data.Get("DBhost"))
if config.Data.Get("DBhost") == "" {
println("sqlite")
handle, err := sql.Open("sqlite", config.Data.Get("DBname"))
if err != nil {
// log.Fatalf("🔥 failed to connect to the database: %s", err.Error())
log.Panic(err)
}
Handle = handle
} else {
println("mysql")
dsn := config.Data.Get("DBuser") + ":" + config.Data.Get("DBpass") + "@tcp(" + config.Data.Get("DBhost") + ":" + config.Data.Get("DBport") + ")/" + config.Data.Get("DBname")
println(dsn)
handle, err := sql.Open("mysql", dsn)
if err != nil {
log.Panic(err)
}
if err = handle.Ping(); err != nil {
log.Panic(err)
}
Handle = handle
}
log.Println("🚀 Connected Successfully to the Database")
}
func LogSQL(query string, args ...interface{}) {
var buffer bytes.Buffer
nArgs := len(args)
// Break the string by question marks, iterate over its parts and for each
// question mark - append an argument and format the argument according to
// it's type, taking into consideration NULL values and quoting strings.
for i, part := range strings.Split(query, "?") {
buffer.WriteString(part)
if i < nArgs {
switch a := args[i].(type) {
case int:
buffer.WriteString(fmt.Sprintf("%d", a))
case int64:
buffer.WriteString(fmt.Sprintf("%d", a))
case bool:
buffer.WriteString(fmt.Sprintf("%t", a))
case sql.NullBool:
if a.Valid {
buffer.WriteString(fmt.Sprintf("%t", a.Bool))
} else {
buffer.WriteString("NULL")
}
case sql.NullInt64:
if a.Valid {
buffer.WriteString(fmt.Sprintf("%d", a.Int64))
} else {
buffer.WriteString("NULL")
}
case sql.NullString:
if a.Valid {
buffer.WriteString(fmt.Sprintf("%q", a.String))
} else {
buffer.WriteString("NULL")
}
case sql.NullFloat64:
if a.Valid {
buffer.WriteString(fmt.Sprintf("%f", a.Float64))
} else {
buffer.WriteString("NULL")
}
default:
buffer.WriteString(fmt.Sprintf("%q", a))
}
}
}
log.Print(buffer.String())
}

View File

@@ -6,7 +6,7 @@ import (
"cpone/db"
)
func NewServicesPiechart(u Piechart, b Barchart, uStore db.PieChartStore, bStore db.BarChartStore) *ServicesPiechart {
func NewServicesPiechart(u Piechart, b Barchart, uStore db.AppStore, bStore db.AppStore) *ServicesPiechart {
return &ServicesPiechart{
Piechart: u,
@@ -126,8 +126,8 @@ type Piechart struct {
type ServicesPiechart struct {
Piechart Piechart
Barchart Barchart
BarChartStore db.BarChartStore
PieChartStore db.PieChartStore
BarChartStore db.AppStore
PieChartStore db.AppStore
}
// func (su *ServicesPiechart) GetAllXsamples() ([]Piechart, error) {

View File

@@ -6,7 +6,7 @@ import (
"cpone/db"
)
func NewServicesEmployee(u Employee, uStore db.EmployeeStore) *ServicesEmployee {
func NewServicesEmployee(u Employee, uStore db.AppStore) *ServicesEmployee {
return &ServicesEmployee{
Employee: u,
@@ -31,7 +31,7 @@ type EmployeeService struct {
type ServicesEmployee struct {
Employee Employee
EmployeeStore db.EmployeeStore
EmployeeStore db.AppStore
}
func (se *ServicesEmployee) GetEmployeeService() ([]EmployeeService, error) {

View File

@@ -6,10 +6,10 @@ import (
"cpone/db"
)
func NewServicesLandingPage(u LandingPage, uStore db.LandingPageStore) *ServicesLandingPage {
func NewServicesLandingPage(uStore db.AppStore) *ServicesLandingPage {
return &ServicesLandingPage{
LandingPage: u,
LandingPageStore: uStore,
}
}
@@ -54,7 +54,7 @@ type FooterNav struct {
type ServicesLandingPage struct {
LandingPage LandingPage
LandingPageStore db.LandingPageStore
LandingPageStore db.AppStore
}
func (su *ServicesLandingPage) GetAllLandingPages() ([]LandingPage, error) {

View File

@@ -6,7 +6,7 @@ import (
"cpone/db"
)
func NewServicesLogin(u Login, uStore db.LoginStore) *ServicesLogin {
func NewServicesLogin(u Login, uStore db.AppStore) *ServicesLogin {
return &ServicesLogin{
Login: u,
@@ -24,7 +24,7 @@ type Login struct {
type ServicesLogin struct {
Login Login
LoginStore db.LoginStore
LoginStore db.AppStore
}
func (su *ServicesLogin) GetLogin(Email string, Password string) (Login, error) {

View File

@@ -6,7 +6,7 @@ import (
"cpone/db"
)
func NewServicesXsample(u Xsample, uStore db.XsampleStore) *ServicesXsample {
func NewServicesXsample(u Xsample, uStore db.AppStore) *ServicesXsample {
return &ServicesXsample{
Xsample: u,
@@ -23,7 +23,7 @@ type Xsample struct {
type ServicesXsample struct {
Xsample Xsample
XsampleStore db.XsampleStore
XsampleStore db.AppStore
}
func (su *ServicesXsample) GetAllXsamples() ([]Xsample, error) {