Skip to content

Commit c0755b5

Browse files
refactor!: remove sqlc for jet
1 parent 24ebc55 commit c0755b5

25 files changed

+862
-427
lines changed

Makefile

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
gen:
2+
jet -source=sqlite -dsn="./smtpbridge_data/smtpbridge.db" -path=./internal/dbgen -ignore-tables bun_migrations,bun_migration_locks
3+
14
snapshot:
25
goreleaser release --snapshot --clean
36

@@ -13,13 +16,13 @@ dev-web:
1316
clean:
1417
rm -rf smtpbridge_data
1518

16-
dep: dep-air dep-sqlc dep-web
19+
dep: dep-air dep-jet dep-web
1720

1821
dep-air:
1922
go install github.com/cosmtrek/air@latest
2023

21-
dep-sqlc:
22-
go install github.com/kyleconroy/sqlc/cmd/sqlc@latest
24+
dep-jet:
25+
go install github.com/go-jet/jet/v2/cmd/jet@latest
2326

2427
dep-web:
2528
cd web && pnpm install

go.mod

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99
github.com/dustin/go-humanize v1.0.1
1010
github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead
1111
github.com/emersion/go-smtp v0.17.0
12+
github.com/go-jet/jet/v2 v2.10.1
1213
github.com/gofiber/fiber/v2 v2.48.0
1314
github.com/gofiber/storage/bbolt v1.3.5
1415
github.com/gofiber/template/html/v2 v2.0.5
@@ -26,6 +27,7 @@ require (
2627
require (
2728
github.com/andybalholm/brotli v1.0.5 // indirect
2829
github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a // indirect
30+
github.com/davecgh/go-spew v1.1.1 // indirect
2931
github.com/fatih/color v1.15.0 // indirect
3032
github.com/gofiber/template v1.8.2 // indirect
3133
github.com/gofiber/utils v1.1.0 // indirect
@@ -40,9 +42,11 @@ require (
4042
github.com/olekukonko/tablewriter v0.0.5 // indirect
4143
github.com/philhofer/fwd v1.1.2 // indirect
4244
github.com/pkg/errors v0.9.1 // indirect
45+
github.com/pmezard/go-difflib v1.0.0 // indirect
4346
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
4447
github.com/rivo/uniseg v0.4.4 // indirect
4548
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
49+
github.com/stretchr/testify v1.8.2 // indirect
4650
github.com/tinylib/msgp v1.1.8 // indirect
4751
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect
4852
github.com/valyala/bytebufferpool v1.0.0 // indirect

go.sum

+116-1
Large diffs are not rendered by default.

internal/db/db.go

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ func Migrate(cc context.Context, bunDB *bun.DB) error {
4343
// Migrate
4444
group, err := migrator.Migrate(cc)
4545
if err != nil {
46+
migrator.Rollback(cc)
4647
return err
4748
}
4849

internal/db/envelope.go

+28-7
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import (
88
"time"
99

1010
"github.com/ItsNotGoodName/smtpbridge/internal/core"
11-
"github.com/ItsNotGoodName/smtpbridge/internal/db/queries"
11+
"github.com/ItsNotGoodName/smtpbridge/internal/dbgen/model"
12+
. "github.com/ItsNotGoodName/smtpbridge/internal/dbgen/table"
1213
"github.com/ItsNotGoodName/smtpbridge/internal/envelope"
1314
"github.com/ItsNotGoodName/smtpbridge/internal/files"
1415
"github.com/ItsNotGoodName/smtpbridge/pkg/pagination"
16+
. "github.com/go-jet/jet/v2/sqlite"
1517
"github.com/uptrace/bun"
1618
)
1719

@@ -111,7 +113,12 @@ func EnvelopeGet(cc core.Context, id int64) (envelope.Envelope, error) {
111113
}
112114

113115
func EnvelopeMessageHTMLGet(cc core.Context, id int64) (string, error) {
114-
return queries.New(cc.DB.DB).GetEnvelopeMessageHTML(cc.Context(), id)
116+
res := model.Messages{}
117+
err := Messages.
118+
SELECT(Messages.HTML).
119+
WHERE(Messages.ID.EQ(Int64(id))).
120+
QueryContext(cc.Context(), cc.DB, &res)
121+
return res.HTML, err
115122
}
116123

117124
func EnvelopeCount(cc core.Context) (int, error) {
@@ -160,14 +167,28 @@ func EnvelopeAttachmentListOrphan(cc core.Context, limit int) ([]*envelope.Attac
160167
}
161168

162169
func EnvelopeDeleteUntilCount(cc core.Context, keep int, olderThan time.Time) (int64, error) {
163-
return queries.New(cc.DB.DB).DeleteEnvelopeUntilCount(cc.Context(), queries.DeleteEnvelopeUntilCountParams{
164-
CreatedAt: olderThan.UTC(),
165-
Limit: int64(keep),
166-
})
170+
// DELETE FROM messages WHERE id NOT IN ( SELECT id FROM messages ORDER BY id DESC LIMIT ?) AND messages.created_at < ?;
171+
172+
res, err := Messages.
173+
DELETE().
174+
WHERE(Messages.ID.NOT_IN(Messages.SELECT(Messages.ID).ORDER_BY(Messages.ID).LIMIT(int64(keep))).
175+
AND(Messages.CreatedAt.LT(DATETIME(olderThan))),
176+
).ExecContext(cc.Context(), cc.DB)
177+
if err != nil {
178+
return 0, err
179+
}
180+
181+
return res.RowsAffected()
167182
}
168183

169184
func EnvelopeDeleteOlderThan(cc core.Context, olderThan time.Time) (int64, error) {
170-
return queries.New(cc.DB.DB).DeleteEnvelopeOlderThan(cc.Context(), olderThan.UTC())
185+
res, err := Messages.DELETE().WHERE(Messages.CreatedAt.LT(DATETIME(olderThan))).ExecContext(cc.Context(), cc.DB)
186+
if err != nil {
187+
return 0, err
188+
}
189+
190+
return res.RowsAffected()
191+
171192
}
172193

173194
func EnvelopeAttachmentDelete(cc core.Context, att *envelope.Attachment) error {

internal/db/internal.go

+72-25
Original file line numberDiff line numberDiff line change
@@ -8,58 +8,105 @@ import (
88
"time"
99

1010
"github.com/ItsNotGoodName/smtpbridge/internal/core"
11-
"github.com/ItsNotGoodName/smtpbridge/internal/db/queries"
11+
"github.com/ItsNotGoodName/smtpbridge/internal/dbgen/model"
12+
. "github.com/ItsNotGoodName/smtpbridge/internal/dbgen/table"
1213
"github.com/ItsNotGoodName/smtpbridge/internal/endpoints"
1314
"github.com/ItsNotGoodName/smtpbridge/internal/rules"
15+
. "github.com/go-jet/jet/v2/sqlite"
1416
"github.com/uptrace/bun"
1517
)
1618

1719
func InternalRuleUpsert(cc core.Context, r rules.Rule, updatedAt time.Time) error {
18-
return queries.New(cc.DB.DB).UpsertInternalRule(cc.Context(), queries.UpsertInternalRuleParams{
20+
_, err := Rules.INSERT(
21+
Rules.Internal,
22+
Rules.InternalID,
23+
Rules.Name,
24+
Rules.Expression,
25+
Rules.UpdatedAt,
26+
Rules.Enable,
27+
).MODEL(model.Rules{
28+
Internal: true,
1929
InternalID: r.InternalID,
2030
Name: r.Name,
2131
Expression: r.Expression,
22-
UpdatedAt: updatedAt.UTC(),
32+
UpdatedAt: updatedAt,
2333
Enable: r.Enable,
24-
})
34+
}).ON_CONFLICT(Rules.InternalID).DO_UPDATE(SET(
35+
Rules.Name.SET(Rules.EXCLUDED.Name),
36+
Rules.Expression.SET(Rules.EXCLUDED.Expression),
37+
Rules.UpdatedAt.SET(Rules.EXCLUDED.UpdatedAt),
38+
)).ExecContext(cc.Context(), cc.DB)
39+
40+
return err
2541
}
2642

27-
func InternalEndpointUpsert(cc core.Context, end endpoints.Endpoint, updatedAt time.Time) error {
28-
config, err := json.Marshal(end.Config)
43+
func InternalEndpointUpsert(cc core.Context, r endpoints.Endpoint, updatedAt time.Time) error {
44+
config, err := json.Marshal(r.Config)
2945
if err != nil {
3046
return err
3147
}
3248

33-
return queries.New(cc.DB.DB).UpsertInternalEndpoint(cc.Context(), queries.UpsertInternalEndpointParams{
34-
InternalID: end.InternalID,
35-
Name: end.Name,
36-
AttachmentDisable: end.AttachmentDisable,
37-
TextDisable: end.TextDisable,
38-
BodyTemplate: end.BodyTemplate,
39-
Kind: end.Kind,
40-
Config: config,
41-
UpdatedAt: updatedAt.UTC(),
42-
})
49+
_, err = Endpoints.INSERT(
50+
Endpoints.Internal,
51+
Endpoints.InternalID,
52+
Endpoints.Name,
53+
Endpoints.AttachmentDisable,
54+
Endpoints.TextDisable,
55+
Endpoints.BodyTemplate,
56+
Endpoints.Kind,
57+
Endpoints.Config,
58+
Endpoints.UpdatedAt,
59+
).MODEL(model.Endpoints{
60+
Internal: true,
61+
InternalID: r.InternalID,
62+
Name: r.Name,
63+
AttachmentDisable: r.AttachmentDisable,
64+
TextDisable: r.TextDisable,
65+
BodyTemplate: r.BodyTemplate,
66+
Kind: r.Kind,
67+
Config: string(config),
68+
UpdatedAt: updatedAt,
69+
}).ON_CONFLICT(Endpoints.InternalID).DO_UPDATE(SET(
70+
Endpoints.InternalID.SET(Endpoints.EXCLUDED.InternalID),
71+
Endpoints.Name.SET(Endpoints.EXCLUDED.Name),
72+
Endpoints.AttachmentDisable.SET(Endpoints.EXCLUDED.AttachmentDisable),
73+
Endpoints.TextDisable.SET(Endpoints.EXCLUDED.TextDisable),
74+
Endpoints.BodyTemplate.SET(Endpoints.EXCLUDED.BodyTemplate),
75+
Endpoints.Kind.SET(Endpoints.EXCLUDED.Kind),
76+
Endpoints.Config.SET(Endpoints.EXCLUDED.Config),
77+
Endpoints.UpdatedAt.SET(Endpoints.EXCLUDED.UpdatedAt),
78+
)).ExecContext(cc.Context(), cc.DB)
79+
80+
return err
4381
}
4482

4583
func InternalRuleEndpointsUpsert(cc core.Context, ruleInternalID string, endpointInternalIDs []string, updatedAt time.Time) error {
4684
if len(endpointInternalIDs) == 0 {
4785
return nil
4886
}
4987

50-
for _, v := range endpointInternalIDs {
51-
rows, err := queries.New(cc.DB.DB).UpsertInternalRuleToEndpoint(cc.Context(), queries.UpsertInternalRuleToEndpointParams{
52-
UpdatedAt: updatedAt.UTC(),
53-
InternalID: ruleInternalID,
54-
InternalID_2: v,
55-
})
88+
for _, endpointInternalID := range endpointInternalIDs {
89+
rows, err := cc.DB.ExecContext(cc.Context(), `
90+
INSERT INTO rules_to_endpoints (
91+
internal,
92+
rule_id,
93+
endpoint_id,
94+
updated_at
95+
) SELECT "1" AS internal, rules.id AS rule_id, endpoints.id AS endpoint_id, ?
96+
FROM rules, endpoints
97+
WHERE rules.internal_id=? AND endpoints.internal_id IN (?)
98+
ON CONFLICT (rule_id, endpoint_id) DO UPDATE SET updated_at=EXCLUDED.updated_at, internal=EXCLUDED.internal
99+
`, updatedAt.UTC(), ruleInternalID, endpointInternalID)
56100
if err != nil {
57101
return err
58102
}
59-
if rows == 0 {
60-
return fmt.Errorf("endpoint not found '%s'", v)
103+
count, err := rows.RowsAffected()
104+
if err != nil {
105+
return err
106+
}
107+
if count == 0 {
108+
return fmt.Errorf("endpoint not found '%s'", endpointInternalID)
61109
}
62-
63110
}
64111

65112
return nil
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
SET statement_timeout = 0;
2+
3+
--bun:split
4+
5+
SELECT 1
6+
7+
--bun:split
8+
9+
SELECT 2

internal/db/sql/schema.sql internal/db/migrations/20230805051005_nuke_everything.up.sql

+17-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
1-
CREATE TABLE IF NOT EXISTS messages (
2-
id INTEGER PRIMARY KEY,
1+
DROP TABLE IF EXISTS rules_to_endpoints;
2+
DROP TABLE IF EXISTS rules;
3+
DROP TABLE IF EXISTS endpoints;
4+
DROP TABLE IF EXISTS attachments;
5+
DROP TABLE IF EXISTS messages;
6+
7+
--bun:split
8+
9+
CREATE TABLE messages (
10+
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
311
from_ TEXT NOT NULL,
412
to_ JSON NOT NULL,
513
subject TEXT NOT NULL,
@@ -11,9 +19,9 @@ CREATE TABLE IF NOT EXISTS messages (
1119

1220
--bun:split
1321

14-
CREATE TABLE IF NOT EXISTS attachments (
15-
id INTEGER PRIMARY KEY,
16-
message_id INTEGER,
22+
CREATE TABLE attachments (
23+
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
24+
message_id INTEGER NOT NULL,
1725
name TEXT NOT NULL,
1826
mime TEXT NOT NULL,
1927
extension TEXT NOT NULL,
@@ -22,8 +30,8 @@ CREATE TABLE IF NOT EXISTS attachments (
2230

2331
--bun:split
2432

25-
CREATE TABLE IF NOT EXISTS endpoints (
26-
id INTEGER PRIMARY KEY,
33+
CREATE TABLE endpoints (
34+
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
2735
internal BOOLEAN NOT NULL,
2836
internal_id TEXT NOT NULL,
2937
name TEXT NOT NULL,
@@ -39,8 +47,8 @@ CREATE TABLE IF NOT EXISTS endpoints (
3947

4048
--bun:split
4149

42-
CREATE TABLE IF NOT EXISTS rules (
43-
id INTEGER PRIMARY KEY,
50+
CREATE TABLE rules (
51+
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
4452
internal BOOLEAN NOT NULL,
4553
internal_id TEXT NOT NULL,
4654
name TEXT NOT NULL,

internal/db/queries/db.go

-31
This file was deleted.

0 commit comments

Comments
 (0)