Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
陈曦
sub2api
Commits
beeab54a
Commit
beeab54a
authored
Apr 21, 2026
by
IanShaw027
Browse files
Implement latest-used user repo queries
parent
b79052aa
Changes
1
Hide whitespace changes
Inline
Side-by-side
backend/internal/repository/user_repo.go
View file @
beeab54a
...
@@ -19,6 +19,7 @@ import (
...
@@ -19,6 +19,7 @@ import (
"github.com/Wei-Shaw/sub2api/ent/usersubscription"
"github.com/Wei-Shaw/sub2api/ent/usersubscription"
"github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
"github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
"github.com/Wei-Shaw/sub2api/internal/service"
"github.com/Wei-Shaw/sub2api/internal/service"
"github.com/lib/pq"
entsql
"entgo.io/ent/dialect/sql"
entsql
"entgo.io/ent/dialect/sql"
)
)
...
@@ -298,6 +299,51 @@ func normalizeEmailAuthIdentitySubject(email string) string {
...
@@ -298,6 +299,51 @@ func normalizeEmailAuthIdentitySubject(email string) string {
return
normalized
return
normalized
}
}
func
(
r
*
userRepository
)
GetLatestUsedAtByUserIDs
(
ctx
context
.
Context
,
userIDs
[]
int64
)
(
map
[
int64
]
*
time
.
Time
,
error
)
{
result
:=
make
(
map
[
int64
]
*
time
.
Time
,
len
(
userIDs
))
if
len
(
userIDs
)
==
0
{
return
result
,
nil
}
if
r
.
sql
==
nil
{
return
nil
,
fmt
.
Errorf
(
"sql executor is not configured"
)
}
rows
,
err
:=
r
.
sql
.
QueryContext
(
ctx
,
`
SELECT user_id, MAX(created_at) AS last_used_at
FROM usage_logs
WHERE user_id = ANY($1)
GROUP BY user_id
`
,
pq
.
Array
(
userIDs
))
if
err
!=
nil
{
return
nil
,
err
}
defer
func
()
{
_
=
rows
.
Close
()
}()
for
rows
.
Next
()
{
var
(
userID
int64
lastUsedAt
time
.
Time
)
if
err
:=
rows
.
Scan
(
&
userID
,
&
lastUsedAt
);
err
!=
nil
{
return
nil
,
err
}
ts
:=
lastUsedAt
.
UTC
()
result
[
userID
]
=
&
ts
}
if
err
:=
rows
.
Err
();
err
!=
nil
{
return
nil
,
err
}
return
result
,
nil
}
func
(
r
*
userRepository
)
GetLatestUsedAtByUserID
(
ctx
context
.
Context
,
userID
int64
)
(
*
time
.
Time
,
error
)
{
latestByUserID
,
err
:=
r
.
GetLatestUsedAtByUserIDs
(
ctx
,
[]
int64
{
userID
})
if
err
!=
nil
{
return
nil
,
err
}
return
latestByUserID
[
userID
],
nil
}
func
(
r
*
userRepository
)
Delete
(
ctx
context
.
Context
,
id
int64
)
error
{
func
(
r
*
userRepository
)
Delete
(
ctx
context
.
Context
,
id
int64
)
error
{
affected
,
err
:=
r
.
client
.
User
.
Delete
()
.
Where
(
dbuser
.
IDEQ
(
id
))
.
Exec
(
ctx
)
affected
,
err
:=
r
.
client
.
User
.
Delete
()
.
Where
(
dbuser
.
IDEQ
(
id
))
.
Exec
(
ctx
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment