Skip to content

Commit

Permalink
Some fixes to make repo searching quicker
Browse files Browse the repository at this point in the history
  • Loading branch information
richmahn committed Jul 7, 2021
1 parent dd3fe49 commit 76e7de9
Show file tree
Hide file tree
Showing 9 changed files with 133 additions and 92 deletions.
4 changes: 4 additions & 0 deletions models/repo.go
Expand Up @@ -245,6 +245,10 @@ type Repository struct {
// Avatar: ID(10-20)-md5(32) - must fit into 64 symbols
Avatar string `xorm:"VARCHAR(64)"`

/*** DCS Customizations ***/
Metadata *map[string]interface{} `xorm:-`
/*** DCS Customizations ***/

CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`
}
Expand Down
8 changes: 5 additions & 3 deletions models/user_dcs.go
Expand Up @@ -28,15 +28,17 @@ func (u *User) GetRepoLanguages() []string {
log.Error("Error GetUserRepositories: %v", err)
} else {
for _, repo := range repos {
lang := dcs.GetLanguageFromRepoName(repo.LowerName)
if lang != "" && !contains(languages, lang) {
languages = append(languages, lang)
}
if dm, err := repo.GetDefaultBranchMetadata(); err != nil {
log.Error("Error GetDefaultBranchMetadata: %v", err)
} else if dm != nil {
lang := (*dm.Metadata)["dublin_core"].(map[string]interface{})["language"].(map[string]interface{})["identifier"].(string)
lang = (*dm.Metadata)["dublin_core"].(map[string]interface{})["language"].(map[string]interface{})["identifier"].(string)
if lang != "" && !contains(languages, lang) {
languages = append(languages, lang)
}
} else if lang := dcs.GetLanguageFromRepoName(repo.LowerName); lang != "" && !contains(languages, lang) {
languages = append(languages, lang)
}
}
}
Expand Down
145 changes: 73 additions & 72 deletions modules/convert/repository.go
Expand Up @@ -95,84 +95,85 @@ func innerToRepo(repo *models.Repository, mode models.AccessMode, isParent bool)

/*** DCS Customizations ***/
catalog := &api.CatalogStages{}
prod, err := models.GetDoor43MetadataByRepoIDAndStage(repo.ID, models.StageProd)
if err != nil {
log.Error("GetDoor43MetadataByRepoIDAndStage: %v", err)
}
preprod, err := models.GetDoor43MetadataByRepoIDAndStage(repo.ID, models.StagePreProd)
if err != nil {
log.Error("GetDoor43MetadataByRepoIDAndStage: %v", err)
}
draft, err := models.GetDoor43MetadataByRepoIDAndStage(repo.ID, models.StageDraft)
if err != nil {
log.Error("GetDoor43MetadataByRepoIDAndStage: %v", err)
}
latest, err := models.GetDoor43MetadataByRepoIDAndStage(repo.ID, models.StageLatest)
if err != nil {
log.Error("GetDoor43MetadataByRepoIDAndStage: %v", err)
}
// prod, err := models.GetDoor43MetadataByRepoIDAndStage(repo.ID, models.StageProd)
// if err != nil {
// log.Error("GetDoor43MetadataByRepoIDAndStage: %v", err)
// }
// preprod, err := models.GetDoor43MetadataByRepoIDAndStage(repo.ID, models.StagePreProd)
// if err != nil {
// log.Error("GetDoor43MetadataByRepoIDAndStage: %v", err)
// }
// draft, err := models.GetDoor43MetadataByRepoIDAndStage(repo.ID, models.StageDraft)
// if err != nil {
// log.Error("GetDoor43MetadataByRepoIDAndStage: %v", err)
// }
// latest, err := models.GetDoor43MetadataByRepoIDAndStage(repo.ID, models.StageLatest)
// if err != nil {
// log.Error("GetDoor43MetadataByRepoIDAndStage: %v", err)
// }

if draft != nil && ((prod != nil && prod.ReleaseDateUnix >= draft.ReleaseDateUnix) ||
(preprod != nil && preprod.ReleaseDateUnix >= draft.ReleaseDateUnix)) {
draft = nil
}
if prod != nil && preprod != nil && prod.ReleaseDateUnix >= preprod.ReleaseDateUnix {
preprod = nil
}
if prod != nil {
prod.Repo = repo
url := prod.GetReleaseURL()
catalog.Production = &api.CatalogStage{
Tag: prod.BranchOrTag,
ReleaseURL: &url,
Released: prod.GetReleaseDateTime(),
ZipballURL: prod.GetZipballURL(),
TarballURL: prod.GetTarballURL(),
}
}
if preprod != nil {
preprod.Repo = repo
url := preprod.GetReleaseURL()
catalog.PreProduction = &api.CatalogStage{
Tag: preprod.BranchOrTag,
ReleaseURL: &url,
Released: preprod.GetReleaseDateTime(),
ZipballURL: preprod.GetZipballURL(),
TarballURL: preprod.GetTarballURL(),
}
}
if draft != nil {
draft.Repo = repo
url := draft.GetReleaseURL()
catalog.Draft = &api.CatalogStage{
Tag: draft.BranchOrTag,
ReleaseURL: &url,
Released: draft.GetReleaseDateTime(),
ZipballURL: draft.GetZipballURL(),
TarballURL: draft.GetTarballURL(),
}
}
if latest != nil {
latest.Repo = repo
catalog.Latest = &api.CatalogStage{
Tag: latest.BranchOrTag,
ReleaseURL: nil,
Released: latest.GetReleaseDateTime(),
ZipballURL: latest.GetZipballURL(),
TarballURL: latest.GetTarballURL(),
}
}
// if draft != nil && ((prod != nil && prod.ReleaseDateUnix >= draft.ReleaseDateUnix) ||
// (preprod != nil && preprod.ReleaseDateUnix >= draft.ReleaseDateUnix)) {
// draft = nil
// }
// if prod != nil && preprod != nil && prod.ReleaseDateUnix >= preprod.ReleaseDateUnix {
// preprod = nil
// }
// if prod != nil {
// prod.Repo = repo
// url := prod.GetReleaseURL()
// catalog.Production = &api.CatalogStage{
// Tag: prod.BranchOrTag,
// ReleaseURL: &url,
// Released: prod.GetReleaseDateTime(),
// ZipballURL: prod.GetZipballURL(),
// TarballURL: prod.GetTarballURL(),
// }
// }
// if preprod != nil {
// preprod.Repo = repo
// url := preprod.GetReleaseURL()
// catalog.PreProduction = &api.CatalogStage{
// Tag: preprod.BranchOrTag,
// ReleaseURL: &url,
// Released: preprod.GetReleaseDateTime(),
// ZipballURL: preprod.GetZipballURL(),
// TarballURL: preprod.GetTarballURL(),
// }
// }
// if draft != nil {
// draft.Repo = repo
// url := draft.GetReleaseURL()
// catalog.Draft = &api.CatalogStage{
// Tag: draft.BranchOrTag,
// ReleaseURL: &url,
// Released: draft.GetReleaseDateTime(),
// ZipballURL: draft.GetZipballURL(),
// TarballURL: draft.GetTarballURL(),
// }
// }
// if latest != nil {
// latest.Repo = repo
// catalog.Latest = &api.CatalogStage{
// Tag: latest.BranchOrTag,
// ReleaseURL: nil,
// Released: latest.GetReleaseDateTime(),
// ZipballURL: latest.GetZipballURL(),
// TarballURL: latest.GetTarballURL(),
// }
// }

// TODO: Load in Repository's LoadAttributes() function and save to repo.Metadata
metadata, err := models.GetDoor43MetadataByRepoIDAndReleaseID(repo.ID, 0)
if err != nil && !models.IsErrDoor43MetadataNotExist(err) {
log.Error("GetDoor43MetadataByRepoIDAndReleaseID: %v", err)
}
if metadata == nil {
metadata, err = repo.GetLatestPreProdCatalogMetadata()
if err != nil {
log.Error("GetLatestPreProdCatalogMetadata: %v", err)
}
}
// if metadata == nil {
// metadata, err = repo.GetLatestPreProdCatalogMetadata()
// if err != nil {
// log.Error("GetLatestPreProdCatalogMetadata: %v", err)
// }
// }

var language, title, subject, checkingLevel string
var books []string
Expand Down
4 changes: 0 additions & 4 deletions modules/convert/user.go
Expand Up @@ -24,10 +24,6 @@ func ToUser(user *models.User, signed, authed bool) *api.User {
AvatarURL: user.AvatarLink(),
Created: user.CreatedUnix.AsTime(),
Restricted: user.IsRestricted,
/*** DCS Customizations ***/
RepoLanguages: user.GetRepoLanguages(),
RepoSubjects: user.GetRepoSubjects(),
/*** END DCS Customizations ***/
}
// hide primary email if API caller is anonymous or user keep email private
if signed && (!user.KeepEmailPrivate || authed) {
Expand Down
22 changes: 22 additions & 0 deletions modules/convert/user_dcs.go
@@ -0,0 +1,22 @@
// Copyright 2020 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package convert

import (
"code.gitea.io/gitea/models"
api "code.gitea.io/gitea/modules/structs"
)

// ToUserDCS convert models.User to api.User with DCS customized fields populated
// signed shall only be set if requester is logged in. authed shall only be set if user is site admin or user himself
func ToUserDCS(user *models.User, signed, authed bool) *api.User {
if user == nil {
return nil
}
result := ToUser(user, signed, authed)
result.RepoLanguages = user.GetRepoLanguages()
result.RepoSubjects = user.GetRepoSubjects()
return result
}
14 changes: 9 additions & 5 deletions modules/dcs/languages.go
Expand Up @@ -38,11 +38,15 @@ func GetLangNames() map[string]interface{} {
// GetLanguageFromRepoName determines the language of a repo by its repo name
func GetLanguageFromRepoName(repoName string) string {
parts := strings.Split(repoName, "_")
if len(parts) > 1 {
ln := GetLangNames()
if _, ok := ln[parts[0]]; ok {
return parts[0]
}
if len(parts) == 2 && IsValidLanguage(parts[0]) && IsValidSubject(parts[1]) {
return parts[0]
}
return ""
}

// IsValidLanguage returns true if string is a valid language code
func IsValidLanguage(lang string) bool {
ln := GetLangNames()
_, ok := ln[lang]
return ok
}
12 changes: 8 additions & 4 deletions modules/dcs/subjects.go
Expand Up @@ -36,10 +36,14 @@ var Subjects = map[string]string{
// GetSubjectFromRepoName determines the subject of a repo by its repo name
func GetSubjectFromRepoName(repoName string) string {
parts := strings.Split(repoName, "_")
if len(parts) > 1 {
if _, ok := Subjects[parts[1]]; ok {
return Subjects[parts[1]]
}
if len(parts) == 2 && IsValidSubject(parts[1]) && IsValidLanguage(parts[0]) {
return Subjects[parts[1]]
}
return ""
}

// IsValidSubject returns true if it is a valid subject
func IsValidSubject(subject string) bool {
_, ok := Subjects[subject]
return ok
}
4 changes: 3 additions & 1 deletion routers/api/v1/admin/user.go
Expand Up @@ -407,7 +407,9 @@ func GetAllUsers(ctx *context.APIContext) {

results := make([]*api.User, len(users))
for i := range users {
results[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User.IsAdmin)
/*** DCS Customizations ***/
results[i] = convert.ToUserDCS(users[i], ctx.IsSigned, ctx.User.IsAdmin)
/*** END DCS Customizations ***/
}

ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
Expand Down
12 changes: 9 additions & 3 deletions routers/api/v1/user/user.go
Expand Up @@ -82,7 +82,9 @@ func Search(ctx *context.APIContext) {

results := make([]*api.User, len(users))
for i := range users {
results[i] = convert.ToUser(users[i], ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin)
/*** DCS Customizations ***/
results[i] = convert.ToUserDCS(users[i], ctx.IsSigned, ctx.User != nil && ctx.User.IsAdmin)
/*** END DCS Customizations ***/
}

ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
Expand Down Expand Up @@ -119,7 +121,9 @@ func GetInfo(ctx *context.APIContext) {
return
}

ctx.JSON(http.StatusOK, convert.ToUser(u, ctx.IsSigned, ctx.User != nil && (ctx.User.ID == u.ID || ctx.User.IsAdmin)))
/*** DCS Customizations ***/
ctx.JSON(http.StatusOK, convert.ToUserDCS(u, ctx.IsSigned, ctx.User != nil && (ctx.User.ID == u.ID || ctx.User.IsAdmin)))
/*** END DCS Customizations ***/
}

// GetAuthenticatedUser get current user's information
Expand All @@ -133,7 +137,9 @@ func GetAuthenticatedUser(ctx *context.APIContext) {
// "200":
// "$ref": "#/responses/User"

ctx.JSON(http.StatusOK, convert.ToUser(ctx.User, ctx.IsSigned, ctx.User != nil))
/*** DCS Customizations ***/
ctx.JSON(http.StatusOK, convert.ToUserDCS(ctx.User, ctx.IsSigned, ctx.User != nil))
/*** END DCS Customizations ***/
}

// GetUserHeatmapData is the handler to get a users heatmap
Expand Down

0 comments on commit 76e7de9

Please sign in to comment.