Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: Star List #33278

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from
Draft
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
1 change: 1 addition & 0 deletions models/migrations/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ func prepareMigrationTasks() []*migration {

// Gitea 1.23.0-rc0 ends at migration ID number 311 (database version 312)
newMigration(312, "Add DeleteBranchAfterMerge to AutoMerge", v1_24.AddDeleteBranchAfterMergeForAutoMerge),
newMigration(314, "Add star_list table", v1_24.AddStarList),
}
return preparedMigrations
}
Expand Down
43 changes: 43 additions & 0 deletions models/migrations/v1_24/v314.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package v1_24 //nolint

import (
"code.gitea.io/gitea/modules/timeutil"

"xorm.io/xorm"
)

type StarList struct {
ID int64 `xorm:"pk autoincr"`
UID int64 `xorm:"INDEX"`
Name string
Desc string

CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`
}

type StarListRepo struct {
UID int64 `xorm:"UNIQUE(s)"`
StarListID int64 `xorm:"UNIQUE(s)"`
RepoID int64 `xorm:"UNIQUE(s)"`
}

func AddStarList(x *xorm.Engine) error {
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
return err
}
err := sess.Sync(new(StarList))
if err != nil {
return err
}
err = sess.Sync(new(StarListRepo))
if err != nil {
return err
}
return sess.Commit()
}
7 changes: 0 additions & 7 deletions models/repo/issue.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,6 @@ import (
"code.gitea.io/gitea/modules/setting"
)

// ___________.__ ___________ __
// \__ ___/|__| _____ ___\__ ___/___________ ____ | | __ ___________
// | | | |/ \_/ __ \| | \_ __ \__ \ _/ ___\| |/ // __ \_ __ \
// | | | | Y Y \ ___/| | | | \// __ \\ \___| <\ ___/| | \/
// |____| |__|__|_| /\___ >____| |__| (____ /\___ >__|_ \\___ >__|
// \/ \/ \/ \/ \/ \/

// CanEnableTimetracker returns true when the server admin enabled time tracking
// This overrules IsTimetrackerEnabled
func (repo *Repository) CanEnableTimetracker() bool {
Expand Down
7 changes: 0 additions & 7 deletions models/repo/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -732,13 +732,6 @@ func (repo *Repository) MustNotBeArchived() error {
return nil
}

// __________ .__ __
// \______ \ ____ ______ ____ _____|__|/ |_ ___________ ___.__.
// | _// __ \\____ \ / _ \/ ___/ \ __\/ _ \_ __ < | |
// | | \ ___/| |_> > <_> )___ \| || | ( <_> ) | \/\___ |
// |____|_ /\___ > __/ \____/____ >__||__| \____/|__| / ____|
// \/ \/|__| \/ \/

// ErrRepoNotExist represents a "RepoNotExist" kind of error.
type ErrRepoNotExist struct {
ID int64
Expand Down
58 changes: 58 additions & 0 deletions models/repo/star_list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package repo

import (
"context"

"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/timeutil"
)

type StarList struct {
ID int64 `xorm:"pk autoincr"`
UID int64 `xorm:"INDEX"`
Name string
Desc string

Repos []Repository `xorm:"-"`

CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`
}

func init() {
db.RegisterModel(new(StarList))
}

func InsertStarList(ctx context.Context, starList *StarList) error {
_, err := db.GetEngine(ctx).Insert(starList)
return err
}

func UpdateStarList(ctx context.Context, starList *StarList) error {
_, err := db.GetEngine(ctx).Where("id = ?", starList.ID).AllCols().Update(starList)
return err
}

func DeleteStarListByID(ctx context.Context, id int64) error {
_, err := db.GetEngine(ctx).Delete(&StarList{ID: id})
return err
}

func GetStarListByID(ctx context.Context, id int64) (*StarList, error) {
starList := new(StarList)
if has, err := db.GetEngine(ctx).Where("id = ?", id).Get(starList); err != nil {
return nil, err
} else if !has {
return nil, nil
}
return starList, nil
}

func GetStarListsForUser(ctx context.Context, id int64) ([]*StarList, error) {
starLists := make([]*StarList, 0, 10)
err := db.GetEngine(ctx).Where("uid = ?", id).Find(&starLists)
return starLists, err
}
54 changes: 54 additions & 0 deletions models/repo/star_list_repo.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package repo

Check failure on line 1 in models/repo/star_list_repo.go

View workflow job for this annotation

GitHub Actions / lint-backend

Copyright not found

Check failure on line 1 in models/repo/star_list_repo.go

View workflow job for this annotation

GitHub Actions / lint-go-windows

Copyright not found

import (
"context"

"code.gitea.io/gitea/models/db"
)

type StarListRepo struct {
UID int64 `xorm:"UNIQUE(s)"`
StarListID int64 `xorm:"UNIQUE(s)"`
RepoID int64 `xorm:"UNIQUE(s)"`
}

func init() {
db.RegisterModel(new(StarListRepo))
}

func StarLists(ctx context.Context, uid, repoID int64, ids []int64) error {
starListRepos := make([]*StarListRepo, 0, len(ids))
for _, id := range ids {
starListRepos = append(starListRepos, &StarListRepo{
UID: uid,
StarListID: id,
RepoID: repoID,
})
}

ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
defer committer.Close()

_, err = db.GetEngine(ctx).Insert(&starListRepos)
if err != nil {
return err
}

_, err = db.GetEngine(ctx).Where("uid = ? AND repo_id = ? AND star_list_id NOT IN (?)", uid, repoID, ids).Delete(new(StarListRepo))
if err != nil {
return err
}

return committer.Commit()
}

func UnStarLists(ctx context.Context, uid, repoID int64, ids []int64) error {
_, err := db.GetEngine(ctx).Where("uid = ? AND repo_id = ? AND star_list_id NOT IN (?)", uid, repoID, ids).Delete(new(StarListRepo))
if err != nil {
return err
}
return nil
}
Loading