Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 23 additions & 12 deletions taco/Dockerfile_token_service
Original file line number Diff line number Diff line change
Expand Up @@ -23,35 +23,46 @@ FROM ubuntu:24.04 AS runner
ARG COMMIT_SHA
WORKDIR /app

# Install ca-certificates for HTTPS requests
# Install ca-certificates, curl, jq for HTTPS requests and URL encoding
RUN apt-get update && \
apt-get install -y ca-certificates curl && \
apt-get install -y ca-certificates curl jq && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

RUN echo "commit sha: ${COMMIT_SHA}"

# Install Atlas CLI for migrations
RUN curl -sSf https://atlasgo.sh | sh

# Copy the binary from builder stage
COPY --from=builder /go/src/github.com/diggerhq/digger/taco/cmd/token_service/token_service /app/token_service

# Make the binary executable
RUN chmod +x /app/token_service
# Copy migration files for token service
COPY --from=builder /go/src/github.com/diggerhq/digger/taco/cmd/token_service/migrations /app/migrations

# Expose the port that token service runs on
EXPOSE 8081
# Copy entrypoint script for token service
COPY cmd/token_service/scripts/entrypoint.sh /app/entrypoint.sh

# Set environment variables with defaults
ENV OPENTACO_PORT=8081
ENV OPENTACO_QUERY_BACKEND=sqlite
ENV OPENTACO_SQLITE_DB_PATH=/app/data/tokens.db
# Copy atlas.hcl for reference (token service specific)
COPY --from=builder /go/src/github.com/diggerhq/digger/taco/cmd/token_service/atlas.hcl /app/atlas.hcl

# Make scripts executable
RUN chmod +x /app/token_service /app/entrypoint.sh

# Create data directory
RUN mkdir -p /app/data

# Expose the port that token service runs on
EXPOSE 8081

# Set environment variables with defaults
ENV OPENTACO_TOKEN_QUERY_BACKEND=sqlite
ENV OPENTACO_TOKEN_SQLITE_DB_PATH=/app/data/token_service.db

# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8081/healthz || exit 1

# Run the token service binary
ENTRYPOINT ["/app/token_service"]
# Run via entrypoint script (applies migrations then starts token service)
ENTRYPOINT ["/bin/bash", "/app/entrypoint.sh"]

113 changes: 113 additions & 0 deletions taco/cmd/token_service/atlas.hcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
variable "DB_URL" {
type = string
default = "postgres://postgres:postgres@localhost:5432/token_service?sslmode=disable"
}

variable "POSTGRES_MIGRATIONS_DIR" {
type = string
default = "file://migrations/postgres"
}

variable "MYSQL_MIGRATIONS_DIR" {
type = string
default = "file://migrations/mysql"
}

variable "SQLITE_MIGRATIONS_DIR" {
type = string
default = "file://migrations/sqlite"
}

data "external_schema" "gorm_postgres" {
program = [
"sh",
"-c",
"cd query && go run ./atlas_loader.go postgres",
]
}

env "postgres" {
src = data.external_schema.gorm_postgres.url
url = var.DB_URL

dev = "docker://postgres/16?timeout=5m"

schemas = ["public"]

migration {
dir = var.POSTGRES_MIGRATIONS_DIR
format = "atlas"
}

lint {
destructive { error = true }
}

format {
migrate {
diff = "{{ sql . \" \" }}"
}
}
}

# MySQL configuration
data "external_schema" "gorm_mysql" {
program = [
"sh",
"-c",
"cd query && go run ./atlas_loader.go mysql",
]
}

env "mysql" {
src = data.external_schema.gorm_mysql.url

dev = "docker://mysql/8/token_service?timeout=5m"

migration {
dir = var.MYSQL_MIGRATIONS_DIR
format = "atlas"
}

lint {
destructive { error = true }
}

format {
migrate {
diff = "{{ sql . \" \" }}"
}
}
}

# SQLite configuration
data "external_schema" "gorm_sqlite" {
program = [
"sh",
"-c",
"cd query && go run ./atlas_loader.go sqlite",
]
}

env "sqlite" {
src = data.external_schema.gorm_sqlite.url

# SQLite uses in-memory dev database, no Docker needed
dev = "sqlite://file?mode=memory"

migration {
dir = var.SQLITE_MIGRATIONS_DIR
format = "atlas"
}

lint {
destructive { error = true }
}

format {
migrate {
diff = "{{ sql . \" \" }}"
}
}
}

35 changes: 6 additions & 29 deletions taco/cmd/token_service/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,21 @@ replace github.com/diggerhq/digger/opentaco/internal => ../../internal

require (
github.com/diggerhq/digger/opentaco/internal v0.0.0-00010101000000-000000000000
github.com/google/uuid v1.6.0
github.com/kelseyhightower/envconfig v1.4.0
github.com/labstack/echo/v4 v4.13.3
gorm.io/driver/mysql v1.6.0
gorm.io/driver/postgres v1.6.0
gorm.io/driver/sqlite v1.6.0
gorm.io/driver/sqlserver v1.6.1
gorm.io/gorm v1.31.0
)

require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/aws/aws-sdk-go-v2 v1.38.1 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.0 // indirect
github.com/aws/aws-sdk-go-v2/config v1.31.2 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.18.6 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.4 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.4 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.4 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.4 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.8.4 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.4 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.4 // indirect
github.com/aws/aws-sdk-go-v2/service/s3 v1.87.1 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.28.2 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.33.2 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.38.0 // indirect
github.com/aws/smithy-go v1.22.5 // indirect
github.com/coreos/go-oidc/v3 v3.11.0 // indirect
github.com/go-jose/go-jose/v4 v4.1.2 // indirect
github.com/go-sql-driver/mysql v1.8.1 // indirect
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
github.com/golang-sql/sqlexp v0.1.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/jackc/pgx/v5 v5.6.0 // indirect
Expand All @@ -48,19 +32,12 @@ require (
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-sqlite3 v1.14.28 // indirect
github.com/microsoft/go-mssqldb v1.8.2 // indirect
github.com/mr-tron/base58 v1.2.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasttemplate v1.2.2 // indirect
golang.org/x/crypto v0.41.0 // indirect
golang.org/x/net v0.43.0 // indirect
golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/sync v0.16.0 // indirect
golang.org/x/sys v0.35.0 // indirect
golang.org/x/text v0.28.0 // indirect
golang.org/x/time v0.8.0 // indirect
gorm.io/driver/mysql v1.6.0 // indirect
gorm.io/driver/postgres v1.6.0 // indirect
gorm.io/driver/sqlite v1.6.0 // indirect
gorm.io/driver/sqlserver v1.6.1 // indirect
gorm.io/gorm v1.31.0 // indirect
)
44 changes: 0 additions & 44 deletions taco/cmd/token_service/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -21,53 +21,13 @@ github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 h1:kYRSnvJju5gYVyhkij+RTJ/VR6QIUaCfWeaFm2ycsjQ=
github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/aws/aws-sdk-go-v2 v1.38.1 h1:j7sc33amE74Rz0M/PoCpsZQ6OunLqys/m5antM0J+Z8=
github.com/aws/aws-sdk-go-v2 v1.38.1/go.mod h1:9Q0OoGQoboYIAJyslFyF1f5K1Ryddop8gqMhWx/n4Wg=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.0 h1:6GMWV6CNpA/6fbFHnoAjrv4+LGfyTqZz2LtCHnspgDg=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.0/go.mod h1:/mXlTIVG9jbxkqDnr5UQNQxW1HRYxeGklkM9vAFeabg=
github.com/aws/aws-sdk-go-v2/config v1.31.2 h1:NOaSZpVGEH2Np/c1toSeW0jooNl+9ALmsUTZ8YvkJR0=
github.com/aws/aws-sdk-go-v2/config v1.31.2/go.mod h1:17ft42Yb2lF6OigqSYiDAiUcX4RIkEMY6XxEMJsrAes=
github.com/aws/aws-sdk-go-v2/credentials v1.18.6 h1:AmmvNEYrru7sYNJnp3pf57lGbiarX4T9qU/6AZ9SucU=
github.com/aws/aws-sdk-go-v2/credentials v1.18.6/go.mod h1:/jdQkh1iVPa01xndfECInp1v1Wnp70v3K4MvtlLGVEc=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.4 h1:lpdMwTzmuDLkgW7086jE94HweHCqG+uOJwHf3LZs7T0=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.4/go.mod h1:9xzb8/SV62W6gHQGC/8rrvgNXU6ZoYM3sAIJCIrXJxY=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.4 h1:IdCLsiiIj5YJ3AFevsewURCPV+YWUlOW8JiPhoAy8vg=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.4/go.mod h1:l4bdfCD7XyyZA9BolKBo1eLqgaJxl0/x91PL4Yqe0ao=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.4 h1:j7vjtr1YIssWQOMeOWRbh3z8g2oY/xPjnZH2gLY4sGw=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.4/go.mod h1:yDmJgqOiH4EA8Hndnv4KwAo8jCGTSnM5ASG1nBI+toA=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.4 h1:BE/MNQ86yzTINrfxPPFS86QCBNQeLKY2A0KhDh47+wI=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.4/go.mod h1:SPBBhkJxjcrzJBc+qY85e83MQ2q3qdra8fghhkkyrJg=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0 h1:6+lZi2JeGKtCraAj1rpoZfKqnQ9SptseRZioejfUOLM=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.0/go.mod h1:eb3gfbVIxIoGgJsi9pGne19dhCBpK6opTYpQqAmdy44=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.8.4 h1:Beh9oVgtQnBgR4sKKzkUBRQpf1GnL4wt0l4s8h2VCJ0=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.8.4/go.mod h1:b17At0o8inygF+c6FOD3rNyYZufPw62o9XJbSfQPgbo=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.4 h1:ueB2Te0NacDMnaC+68za9jLwkjzxGWm0KB5HTUHjLTI=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.4/go.mod h1:nLEfLnVMmLvyIG58/6gsSA03F1voKGaCfHV7+lR8S7s=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.4 h1:HVSeukL40rHclNcUqVcBwE1YoZhOkoLeBfhUqR3tjIU=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.4/go.mod h1:DnbBOv4FlIXHj2/xmrUQYtawRFC9L9ZmQPz+DBc6X5I=
github.com/aws/aws-sdk-go-v2/service/s3 v1.87.1 h1:2n6Pd67eJwAb/5KCX62/8RTU0aFAAW7V5XIGSghiHrw=
github.com/aws/aws-sdk-go-v2/service/s3 v1.87.1/go.mod h1:w5PC+6GHLkvMJKasYGVloB3TduOtROEMqm15HSuIbw4=
github.com/aws/aws-sdk-go-v2/service/sso v1.28.2 h1:ve9dYBB8CfJGTFqcQ3ZLAAb/KXWgYlgu/2R2TZL2Ko0=
github.com/aws/aws-sdk-go-v2/service/sso v1.28.2/go.mod h1:n9bTZFZcBa9hGGqVz3i/a6+NG0zmZgtkB9qVVFDqPA8=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.33.2 h1:pd9G9HQaM6UZAZh19pYOkpKSQkyQQ9ftnl/LttQOcGI=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.33.2/go.mod h1:eknndR9rU8UpE/OmFpqU78V1EcXPKFTTm5l/buZYgvM=
github.com/aws/aws-sdk-go-v2/service/sts v1.38.0 h1:iV1Ko4Em/lkJIsoKyGfc0nQySi+v0Udxr6Igq+y9JZc=
github.com/aws/aws-sdk-go-v2/service/sts v1.38.0/go.mod h1:bEPcjW7IbolPfK67G1nilqWyoxYMSPrDiIQ3RdIdKgo=
github.com/aws/smithy-go v1.22.5 h1:P9ATCXPMb2mPjYBgueqJNCA5S9UfktsW0tTxi+a7eqw=
github.com/aws/smithy-go v1.22.5/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/OtI=
github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko=
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI=
github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo=
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/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
Expand Down Expand Up @@ -129,8 +89,6 @@ github.com/microsoft/go-mssqldb v1.8.2 h1:236sewazvC8FvG6Dr3bszrVhMkAl4KYImryLkR
github.com/microsoft/go-mssqldb v1.8.2/go.mod h1:vp38dT33FGfVotRiTmDo3bFyaHq+p3LektQrjTULowo=
github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
Expand Down Expand Up @@ -198,8 +156,6 @@ golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
Expand Down
50 changes: 21 additions & 29 deletions taco/cmd/token_service/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import (
"os/signal"
"time"

"github.com/diggerhq/digger/opentaco/internal/query"
"github.com/diggerhq/digger/opentaco/internal/query/types"
"github.com/diggerhq/digger/opentaco/cmd/token_service/query"
querytypes "github.com/diggerhq/digger/opentaco/cmd/token_service/query/types"
"github.com/diggerhq/digger/opentaco/internal/token_service"
"github.com/kelseyhightower/envconfig"
"github.com/labstack/echo/v4"
Expand All @@ -23,51 +23,43 @@ import (
"gorm.io/gorm/logger"
)

// change this random number to bump version of token service: 1
// change this random number to bump version of token service: 2
func main() {
var (
port = flag.String("port", "8081", "Server port")
)
flag.Parse()

// Load configuration from environment variables into our struct.
var queryCfg query.Config
err := envconfig.Process("opentaco", &queryCfg) // The prefix "OPENTACO" will be used for all vars.
// Load configuration from environment variables with "opentaco_token" prefix
var dbCfg query.Config
err := envconfig.Process("opentaco_token", &dbCfg)
if err != nil {
log.Fatalf("Failed to process configuration: %v", err)
log.Fatalf("Failed to process token service database configuration: %v", err)
}

log.Printf("Connecting to database backend: %s", queryCfg.Backend)

// Connect directly to database without using QueryStore
var db *gorm.DB
switch queryCfg.Backend {
case "postgres":
db, err = connectPostgres(queryCfg.Postgres)
case "mysql":
db, err = connectMySQL(queryCfg.MySQL)
case "sqlite", "":
db, err = connectSQLite(queryCfg.SQLite)
default:
log.Fatalf("Unsupported database backend: %s", queryCfg.Backend)
}

// --- Initialize Token Service Database ---

// Create the database connection for token service
db, err := query.NewDB(dbCfg)
if err != nil {
log.Fatalf("Failed to connect to database: %v", err)
log.Fatalf("Failed to initialize token service database: %v", err)
}

// Ensure proper cleanup

sqlDB, err := db.DB()
if err != nil {
log.Fatalf("Failed to get underlying sql.DB: %v", err)
}
defer sqlDB.Close()

// Auto-migrate Token table only (token service doesn't need users, orgs, units, etc.)
if err := db.AutoMigrate(&types.Token{}); err != nil {
log.Fatalf("Failed to migrate Token table: %v", err)
log.Printf("Token service database initialized: %s", dbCfg.Backend)

// Auto-migrate token models (ensures schema exists)
// Note: In Docker, migrations are applied via Atlas in entrypoint.sh
// This AutoMigrate is primarily for local development convenience
if err := db.AutoMigrate(querytypes.TokenModels...); err != nil {
log.Fatalf("Failed to auto-migrate token models: %v", err)
}
log.Println("Token table migrated successfully")
log.Println("Token service database schema verified")

// Create token repository
tokenRepo := token_service.NewTokenRepository(db)
Expand Down
Loading
Loading