Skip to content

Commit

Permalink
Merge pull request #118 from lazypic/iss117
Browse files Browse the repository at this point in the history
페이지 검색이 잘 되도록 만듬.
  • Loading branch information
khw7096 authored Jun 17, 2023
2 parents 09dad41 + fef20e7 commit b37b9b6
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 91 deletions.
98 changes: 9 additions & 89 deletions db_item_mgo.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ func Distinct(session *mgo.Session, project string, key string) ([]string, error
}
session.SetMode(mgo.Monotonic, true)
c := session.DB(*flagDBName).C("items")
err := c.Find(bson.M{}).Distinct(key, &result)
err := c.Find(bson.M{"project": project}).Distinct(key, &result)
if err != nil {
return nil, err
}
Expand All @@ -256,7 +256,7 @@ func DistinctDdline(session *mgo.Session, project string, key string) ([]string,
}
session.SetMode(mgo.Monotonic, true)
c := session.DB(*flagDBName).C("items")
err := c.Find(bson.M{}).Distinct(key, &result)
err := c.Find(bson.M{"project": project}).Distinct(key, &result)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -295,8 +295,8 @@ func SearchAllShot(session *mgo.Session, project, sortkey string) ([]Item, error
session.SetMode(mgo.Monotonic, true)
c := session.DB(*flagDBName).C("items")
queries := []bson.M{}
queries = append(queries, bson.M{"type": "org"})
queries = append(queries, bson.M{"type": "left"})
queries = append(queries, bson.M{"project": project, "type": "org"})
queries = append(queries, bson.M{"project": project, "type": "left"})
q := bson.M{"$or": queries}
err := c.Find(q).Sort(sortkey).All(&results)
if err != nil {
Expand All @@ -310,7 +310,7 @@ func SearchAllAsset(session *mgo.Session, project, sortkey string) ([]Item, erro
results := []Item{}
session.SetMode(mgo.Monotonic, true)
c := session.DB(*flagDBName).C("items")
err := c.Find(bson.M{"type": "asset"}).Sort(sortkey).All(&results)
err := c.Find(bson.M{"project": project, "type": "asset"}).Sort(sortkey).All(&results)
if err != nil {
return nil, err
}
Expand All @@ -323,9 +323,9 @@ func SearchAll(session *mgo.Session, project, sortkey string) ([]Item, error) {
session.SetMode(mgo.Monotonic, true)
c := session.DB(*flagDBName).C("items")
queries := []bson.M{}
queries = append(queries, bson.M{"type": "org"})
queries = append(queries, bson.M{"type": "left"})
queries = append(queries, bson.M{"type": "asset"})
queries = append(queries, bson.M{"project": project, "type": "org"})
queries = append(queries, bson.M{"project": project, "type": "left"})
queries = append(queries, bson.M{"project": project, "type": "asset"})
q := bson.M{"$or": queries}
err := c.Find(q).Sort(sortkey).All(&results)
if err != nil {
Expand All @@ -346,58 +346,6 @@ func SearchAssettags(session *mgo.Session, op SearchOption) ([]Item, error) {
return SearchKey(session, op, "assettags")
}

// SearchAssetTree 함수는 에셋이름을 하나 받아서 관련된 모든 에셋을 구하는 함수이다.
func SearchAssetTree(session *mgo.Session, op SearchOption) ([]Item, error) {
if op.Searchword == "" { // 검색어가 없다면 종료한다.
return []Item{}, nil
}
session.SetMode(mgo.Monotonic, true)
c := session.DB(*flagDBName).C("items")
var allAssets []Item
err := c.Find(bson.M{"type": "asset"}).Sort(op.Sortkey).All(&allAssets)
if err != nil {
if err == mgo.ErrNotFound {
return []Item{}, nil
}
return nil, err
}

var result []Item
var waittags []string
var donetags []string
waittags = append(waittags, op.Searchword) // 최초 검색단어를 대기리스트에 넣는다.
for len(waittags) > 0 {
// fmt.Println("-------------------------------------------------------------") // 디버그 구분선
hasDone := false
for _, donetag := range donetags {
if donetag == waittags[0] {
// fmt.Printf("%s는 이미 과거에 처리되었습니다.\n", waittags[0]) // 디버그를 위해서 놔둔다.
hasDone = true
}
}
for _, item := range allAssets {
if item.Name == waittags[0] {
// fmt.Printf("%s은 자기자신입니다.\n", item.Name) // 디버그를 위해서 놔둔다.
donetags = append(donetags, item.Name)
if !hasDone {
result = append(result, item)
}
} else {
for _, tag := range item.Assettags {
if tag == waittags[0] {
// fmt.Printf("%s는 %s와 연결되어 있습니다.\n", item.Name, tag) // 디버그를 위해서 놔둔다.
waittags = append(waittags, item.Name)
}
}
}
}
// fmt.Println("디버그:", waittags) // 디버그를 위해서 놔둔다.
// fmt.Println("디버그:", donetags) // 디버그를 위해서 놔둔다.
waittags = waittags[1:] // 처리한 값은 뺀다.
}
return result, nil
}

// SearchKey 함수는 Item.{key} 필드의 값과 검색어가 정확하게 일치하는 항목들만 검색한다.
func SearchKey(session *mgo.Session, op SearchOption, key string) ([]Item, error) {
session.SetMode(mgo.Monotonic, true)
Expand Down Expand Up @@ -430,34 +378,6 @@ func SearchKey(session *mgo.Session, op SearchOption, key string) ([]Item, error
return results, nil
}

// SearchDdline 함수는 검색옵션, 파트정보(2d,3d)를 받아서 쿼리한다.
func SearchDdline(session *mgo.Session, op SearchOption, part string) ([]Item, error) {
session.SetMode(mgo.Monotonic, true)
c := session.DB(*flagDBName).C("items")
query := []bson.M{}
switch part {
case "2d":
query = append(query, bson.M{"ddline2d": &bson.RegEx{Pattern: "....-" + op.Searchword[0:2] + "-" + op.Searchword[2:4]}})
case "3d":
query = append(query, bson.M{"ddline3d": &bson.RegEx{Pattern: "....-" + op.Searchword[0:2] + "-" + op.Searchword[2:4]}})
default:
query = append(query, bson.M{})
}

status := []bson.M{}

q := bson.M{"$and": []bson.M{
{"$or": query},
{"$or": status},
}}
var results []Item
err := c.Find(q).Sort(op.Sortkey).All(&results)
if err != nil {
return nil, err
}
return results, nil
}

// SearchStatusNum 함수는 검색된 결과에 대한 상태별 갯수를 검색한다.
func SearchStatusNum(op SearchOption, items []Item) (Infobarnum, error) {
var results Infobarnum
Expand Down Expand Up @@ -498,7 +418,7 @@ func Totalnum(session *mgo.Session, project string) (Infobarnum, error) {
c := session.DB(*flagDBName).C("items")

var results Infobarnum
totalnum, err := c.Find(bson.M{"$or": []bson.M{{"type": "org"}, {"type": "left"}}}).Count()
totalnum, err := c.Find(bson.M{"$or": []bson.M{{"project": project, "type": "org"}, {"project": project, "type": "left"}}}).Count()
if err != nil {
return Infobarnum{}, err
}
Expand Down
14 changes: 12 additions & 2 deletions db_search.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,6 @@ func GenQuery(session *mgo.Session, op SearchOption) (SearchOption, bson.M) {
}
} else if strings.HasPrefix(word, "rnum:") { // 롤넘버 형태일 때
query = append(query, bson.M{"rnum": &bson.RegEx{Pattern: strings.TrimPrefix(word, "rnum:"), Options: "i"}})
} else if op.Project != "" { // 빈문자열일 때 전체 프로젝트를 검색한다.
query = append(query, bson.M{"project": op.Project})
} else {
switch word {
case "all", "All", "ALL", "올", "미ㅣ", "dhf", "전체":
Expand Down Expand Up @@ -268,7 +266,19 @@ func GenQuery(session *mgo.Session, op SearchOption) (SearchOption, bson.M) {
if len(statusQueries) != 0 {
queries = append(queries, bson.M{"$or": statusQueries})
}

// 프로젝트 쿼리에 대해서 and 처리를 진행한다.
projectQueries := []bson.M{}
if op.Project != "" { // 빈문자열일 때 전체 프로젝트를 검색한다.
projectQueries = append(projectQueries, bson.M{"project": op.Project})
}
if len(projectQueries) != 0 {
queries = append(queries, bson.M{"$and": projectQueries})
}

// 최종쿼리를 지정한다.
q := bson.M{"$and": queries}

// 정렬설정
switch op.Sortkey {
// 스캔길이, 스캔날짜는 역순으로 정렬한다.
Expand Down

0 comments on commit b37b9b6

Please sign in to comment.