feat: add object storage and points leaderboard

This commit is contained in:
richjohnrambo
2026-10-18 18:11:34 +08:00
parent bce5edfaf5
commit b79b781f15
24 changed files with 359 additions and 212 deletions
+3 -2
View File
@@ -4,6 +4,7 @@ import "context"
type AttachmentCreation struct {
MemberID int64
Drive string
Name string
MimeType string
Path string
@@ -21,8 +22,8 @@ type Attachment struct {
func (s *Store) CreateAttachment(ctx context.Context, input AttachmentCreation) (*Attachment, error) {
result, err := s.db.ExecContext(ctx, `INSERT INTO hg_sys_attachment
(app_id,member_id,cate_id,drive,name,kind,mime_type,naive_type,path,file_url,size,ext,md5,status,created_at,updated_at)
VALUES('olons_server',?,0,'local',?,'image',?,'image',?,?,?, ?,?,1,UTC_TIMESTAMP(),UTC_TIMESTAMP())`,
input.MemberID, input.Name, input.MimeType, input.Path, input.URL, input.Size, input.Ext, input.MD5)
VALUES('olons_server',?,0,?,?,'image',?,'image',?,?,?, ?,?,1,UTC_TIMESTAMP(),UTC_TIMESTAMP())`,
input.MemberID, input.Drive, input.Name, input.MimeType, input.Path, input.URL, input.Size, input.Ext, input.MD5)
if err != nil {
return nil, err
}
+6 -6
View File
@@ -68,10 +68,10 @@ type TaskSummary struct {
}
type LeaderboardMember struct {
MemberID int64 `db:"member_id"`
Username string `db:"username"`
AvatarURL string `db:"avatar_url"`
CompletedCount int64 `db:"completed_count"`
MemberID int64 `db:"member_id"`
Username string `db:"username"`
AvatarURL string `db:"avatar_url"`
ClaimedPoints int64 `db:"claimed_points"`
}
type CustomerService struct {
@@ -250,7 +250,7 @@ func (s *Store) TaskLeaderboard(ctx context.Context, tenantID int64, limit int)
}
rows := make([]LeaderboardMember, 0)
err := s.db.SelectContext(ctx, &rows, `SELECT m.id AS member_id,m.username,
COALESCE(a.file_url,'') AS avatar_url,COUNT(o.id) AS completed_count
COALESCE(a.file_url,'') AS avatar_url,COALESCE(SUM(o.total_amount),0) AS claimed_points
FROM hg_app_member m
LEFT JOIN hg_app_member_profile p ON p.tenant_id=m.tenant_id AND p.member_id=m.id
LEFT JOIN hg_sys_attachment a ON a.id=p.avatar_attachment_id AND a.status=1
@@ -258,7 +258,7 @@ func (s *Store) TaskLeaderboard(ctx context.Context, tenantID int64, limit int)
AND o.order_type=2 AND o.order_status=4
WHERE m.tenant_id=? AND m.member_status=1 AND m.deleted_at IS NULL
GROUP BY m.id,m.username,a.file_url
ORDER BY completed_count DESC,m.id ASC LIMIT ?`, tenantID, limit)
ORDER BY claimed_points DESC,m.id ASC LIMIT ?`, tenantID, limit)
return rows, err
}
+20
View File
@@ -0,0 +1,20 @@
package store
import "context"
func (s *Store) UploadConfigValues(ctx context.Context) (map[string]string, error) {
rows, err := s.db.QueryContext(ctx, "SELECT `key`, `value` FROM hg_sys_config WHERE `group`='upload' AND status=1")
if err != nil {
return nil, err
}
defer rows.Close()
values := make(map[string]string)
for rows.Next() {
var key, value string
if err = rows.Scan(&key, &value); err != nil {
return nil, err
}
values[key] = value
}
return values, rows.Err()
}