Skip to content
This repository was archived by the owner on May 30, 2024. It is now read-only.

Commit 18a6cf4

Browse files
author
Noah Hanjun Lee
authored
Add namespace and name field to /repos API (#102)
* Add the unique constraint for namespace and name * Add namespace, name params to repos API
1 parent 3fa3dbb commit 18a6cf4

File tree

16 files changed

+137
-289
lines changed

16 files changed

+137
-289
lines changed

ent/migrate/schema.go

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ent/schema/repo.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"entgo.io/ent/dialect/entsql"
88
"entgo.io/ent/schema/edge"
99
"entgo.io/ent/schema/field"
10+
"entgo.io/ent/schema/index"
1011
)
1112

1213
// Repo holds the schema definition for the Repo entity.
@@ -58,3 +59,11 @@ func (Repo) Edges() []ent.Edge {
5859
}),
5960
}
6061
}
62+
63+
func (Repo) Indexes() []ent.Index {
64+
return []ent.Index{
65+
index.Fields("namespace", "name").
66+
Unique(),
67+
index.Fields("name"),
68+
}
69+
}

go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb
106106
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
107107
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
108108
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
109+
github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4=
109110
github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4=
110111
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
111112
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=

internal/interactor/interface.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ type (
2828
UpdateChatUser(ctx context.Context, cu *ent.ChatUser) (*ent.ChatUser, error)
2929
DeleteChatUser(ctx context.Context, cu *ent.ChatUser) error
3030

31-
ListReposOfUser(ctx context.Context, u *ent.User, q string, page, perPage int) ([]*ent.Repo, error)
32-
ListSortedReposOfUser(ctx context.Context, u *ent.User, q string, page, perPage int) ([]*ent.Repo, error)
31+
ListReposOfUser(ctx context.Context, u *ent.User, q, namespace, name string, sorted bool, page, perPage int) ([]*ent.Repo, error)
3332
FindRepoOfUserByID(ctx context.Context, u *ent.User, id string) (*ent.Repo, error)
3433
FindRepoOfUserByNamespaceName(ctx context.Context, u *ent.User, namespace, name string) (*ent.Repo, error)
3534
FindRepoByID(ctx context.Context, id string) (*ent.Repo, error)

internal/interactor/mock/pkg.go

Lines changed: 4 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/interactor/repo.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,6 @@ import (
88
"github.com/gitploy-io/gitploy/vo"
99
)
1010

11-
func (i *Interactor) ListReposOfUser(ctx context.Context, u *ent.User, sorted bool, q string, page, perPage int) (repos []*ent.Repo, err error) {
12-
if sorted {
13-
repos, err = i.Store.ListSortedReposOfUser(ctx, u, q, page, perPage)
14-
} else {
15-
repos, err = i.Store.ListReposOfUser(ctx, u, q, page, perPage)
16-
}
17-
18-
return repos, err
19-
}
20-
2111
func (i *Interactor) ActivateRepo(ctx context.Context, u *ent.User, r *ent.Repo, c *vo.WebhookConfig) (*ent.Repo, error) {
2212
hid, err := i.CreateWebhook(ctx, u, r, c)
2313
if err != nil {

internal/pkg/store/repo.go

Lines changed: 42 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ import (
1111
"github.com/gitploy-io/gitploy/vo"
1212
)
1313

14-
func (s *Store) ListReposOfUser(ctx context.Context, u *ent.User, q string, page, perPage int) ([]*ent.Repo, error) {
15-
repos, err := s.c.Repo.
14+
func (s *Store) ListReposOfUser(ctx context.Context, u *ent.User, q, namespace, name string, sorted bool, page, perPage int) ([]*ent.Repo, error) {
15+
// Build the query with parameters.
16+
qry := s.c.Repo.
1617
Query().
1718
Where(func(s *sql.Selector) {
1819
t := sql.Table(perm.Table)
@@ -21,51 +22,33 @@ func (s *Store) ListReposOfUser(ctx context.Context, u *ent.User, q string, page
2122
On(t.C(perm.FieldRepoID), s.C(repo.FieldID)).
2223
Where(sql.EQ(t.C(perm.FieldUserID), u.ID))
2324
}).
24-
Where(
25-
repo.NameContains(q),
26-
).
2725
Limit(perPage).
28-
Offset(offset(page, perPage)).
29-
All(ctx)
30-
if err != nil {
31-
return nil, err
26+
Offset(offset(page, perPage))
27+
28+
if q != "" {
29+
qry = qry.Where(
30+
repo.Or(
31+
repo.NamespaceContains(q),
32+
repo.NameContains(q),
33+
),
34+
)
3235
}
3336

34-
for _, r := range repos {
35-
deployments, err := r.
36-
QueryDeployments().
37-
Order(ent.Desc(deployment.FieldID)).
38-
Limit(3).
39-
WithUser().
40-
All(ctx)
41-
if err != nil {
42-
return nil, err
43-
}
37+
if namespace != "" {
38+
qry = qry.Where(repo.NamespaceEQ(namespace))
39+
}
4440

45-
r.Edges.Deployments = deployments
41+
if name != "" {
42+
qry = qry.Where(repo.NameEQ(name))
4643
}
47-
return repos, nil
48-
}
4944

50-
func (s *Store) ListSortedReposOfUser(ctx context.Context, u *ent.User, q string, page, perPage int) ([]*ent.Repo, error) {
51-
repos, err := s.c.Repo.
52-
Query().
53-
Where(func(s *sql.Selector) {
54-
t := sql.Table(perm.Table)
55-
s.
56-
Join(t).
57-
On(t.C(perm.FieldRepoID), s.C(repo.FieldID)).
58-
Where(sql.EQ(t.C(perm.FieldUserID), u.ID))
59-
}).
60-
Where(
61-
repo.And(
62-
repo.NameContains(q),
63-
),
64-
).
65-
Order(ent.Desc(repo.FieldLatestDeployedAt)).
66-
Limit(perPage).
67-
Offset(offset(page, perPage)).
68-
All(ctx)
45+
if sorted {
46+
qry = qry.Order(
47+
ent.Desc(repo.FieldLatestDeployedAt),
48+
)
49+
}
50+
51+
repos, err := qry.All(ctx)
6952
if err != nil {
7053
return nil, err
7154
}
@@ -90,24 +73,6 @@ func (s *Store) FindRepoByID(ctx context.Context, id string) (*ent.Repo, error)
9073
return s.c.Repo.Get(ctx, id)
9174
}
9275

93-
func (s *Store) SyncRepo(ctx context.Context, r *vo.RemoteRepo) (*ent.Repo, error) {
94-
return s.c.Repo.
95-
Create().
96-
SetID(r.ID).
97-
SetNamespace(r.Namespace).
98-
SetName(r.Name).
99-
SetDescription(r.Description).
100-
Save(ctx)
101-
}
102-
103-
func (s *Store) UpdateRepo(ctx context.Context, r *ent.Repo) (*ent.Repo, error) {
104-
return s.c.Repo.
105-
UpdateOne(r).
106-
SetConfigPath(r.ConfigPath).
107-
SetLocked(r.Locked).
108-
Save(ctx)
109-
}
110-
11176
func (s *Store) FindRepoOfUserByID(ctx context.Context, u *ent.User, id string) (*ent.Repo, error) {
11277
return s.c.Repo.
11378
Query().
@@ -148,6 +113,24 @@ func (s *Store) FindRepoOfUserByNamespaceName(ctx context.Context, u *ent.User,
148113
return r, nil
149114
}
150115

116+
func (s *Store) SyncRepo(ctx context.Context, r *vo.RemoteRepo) (*ent.Repo, error) {
117+
return s.c.Repo.
118+
Create().
119+
SetID(r.ID).
120+
SetNamespace(r.Namespace).
121+
SetName(r.Name).
122+
SetDescription(r.Description).
123+
Save(ctx)
124+
}
125+
126+
func (s *Store) UpdateRepo(ctx context.Context, r *ent.Repo) (*ent.Repo, error) {
127+
return s.c.Repo.
128+
UpdateOne(r).
129+
SetConfigPath(r.ConfigPath).
130+
SetLocked(r.Locked).
131+
Save(ctx)
132+
}
133+
151134
func (s *Store) Activate(ctx context.Context, r *ent.Repo) (*ent.Repo, error) {
152135
return s.c.Repo.
153136
UpdateOne(r).

0 commit comments

Comments
 (0)