mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 14:31:02 +00:00 
			
		
		
		
	user, topic, project, label, milestone, repository, pull_request, release, asset, comment, reaction, review providers Signed-off-by: Earl Warren <contact@earl-warren.org> Preserve file size when creating attachments Introduced inc6f5029708repoList.LoadAttributes has a ctx argument now Rename `repo.GetOwner` to `repo.LoadOwner`bd66fa586aupgrade to the latest gof3 (cherry picked from commitc770713656) [F3] ID remapping logic is in place, remove workaround (cherry picked from commitd0fee30167) [F3] it is experimental, do not enable by default (cherry picked from commitde325b21d0) (cherry picked from commit547e7b3c40)
		
			
				
	
	
		
			116 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package driver
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	"code.gitea.io/gitea/models/db"
 | |
| 	repo_model "code.gitea.io/gitea/models/repo"
 | |
| 
 | |
| 	"lab.forgefriends.org/friendlyforgeformat/gof3/format"
 | |
| 	"lab.forgefriends.org/friendlyforgeformat/gof3/util"
 | |
| )
 | |
| 
 | |
| type Topic struct {
 | |
| 	repo_model.Topic
 | |
| }
 | |
| 
 | |
| func TopicConverter(f *repo_model.Topic) *Topic {
 | |
| 	return &Topic{
 | |
| 		Topic: *f,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (o Topic) GetID() int64 {
 | |
| 	return o.ID
 | |
| }
 | |
| 
 | |
| func (o *Topic) SetID(id int64) {
 | |
| 	o.ID = id
 | |
| }
 | |
| 
 | |
| func (o *Topic) IsNil() bool {
 | |
| 	return o.ID == 0
 | |
| }
 | |
| 
 | |
| func (o *Topic) Equals(other *Topic) bool {
 | |
| 	return o.Name == other.Name
 | |
| }
 | |
| 
 | |
| func (o *Topic) ToFormat() *format.Topic {
 | |
| 	return &format.Topic{
 | |
| 		Common: format.NewCommon(o.ID),
 | |
| 		Name:   o.Name,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (o *Topic) FromFormat(topic *format.Topic) {
 | |
| 	*o = Topic{
 | |
| 		Topic: repo_model.Topic{
 | |
| 			ID:   topic.Index.GetID(),
 | |
| 			Name: topic.Name,
 | |
| 		},
 | |
| 	}
 | |
| }
 | |
| 
 | |
| type TopicProvider struct {
 | |
| 	g *Forgejo
 | |
| }
 | |
| 
 | |
| func (o *TopicProvider) ToFormat(ctx context.Context, topic *Topic) *format.Topic {
 | |
| 	return topic.ToFormat()
 | |
| }
 | |
| 
 | |
| func (o *TopicProvider) FromFormat(ctx context.Context, m *format.Topic) *Topic {
 | |
| 	var topic Topic
 | |
| 	topic.FromFormat(m)
 | |
| 	return &topic
 | |
| }
 | |
| 
 | |
| func (o *TopicProvider) GetObjects(ctx context.Context, user *User, project *Project, page int) []*Topic {
 | |
| 	topics, _, err := repo_model.FindTopics(&repo_model.FindTopicOptions{
 | |
| 		ListOptions: db.ListOptions{Page: page, PageSize: o.g.perPage},
 | |
| 		RepoID:      project.GetID(),
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 
 | |
| 	return util.ConvertMap[*repo_model.Topic, *Topic](topics, TopicConverter)
 | |
| }
 | |
| 
 | |
| func (o *TopicProvider) ProcessObject(ctx context.Context, user *User, project *Project, topic *Topic) {
 | |
| }
 | |
| 
 | |
| func (o *TopicProvider) Get(ctx context.Context, user *User, project *Project, exemplar *Topic) *Topic {
 | |
| 	id := exemplar.GetID()
 | |
| 	topic, err := repo_model.GetRepoTopicByID(ctx, project.GetID(), id)
 | |
| 	if repo_model.IsErrTopicNotExist(err) {
 | |
| 		return &Topic{}
 | |
| 	}
 | |
| 	if err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	return TopicConverter(topic)
 | |
| }
 | |
| 
 | |
| func (o *TopicProvider) Put(ctx context.Context, user *User, project *Project, topic *Topic) *Topic {
 | |
| 	t, err := repo_model.AddTopic(project.GetID(), topic.Name)
 | |
| 	if err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	return o.Get(ctx, user, project, TopicConverter(t))
 | |
| }
 | |
| 
 | |
| func (o *TopicProvider) Delete(ctx context.Context, user *User, project *Project, topic *Topic) *Topic {
 | |
| 	t := o.Get(ctx, user, project, topic)
 | |
| 	if !t.IsNil() {
 | |
| 		t, err := repo_model.DeleteTopic(project.GetID(), t.Name)
 | |
| 		if err != nil {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 		return TopicConverter(t)
 | |
| 	}
 | |
| 	return t
 | |
| }
 |