/
parentlisthandler.go
90 lines (76 loc) · 2.33 KB
/
parentlisthandler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package main
import (
"fmt"
"net/http"
"path/filepath"
"github.com/labstack/echo"
"github.com/mryp/squidgirl-go/db"
)
//ParentListRequest はファイル一覧情報取得のリクエストデータを保持する
type ParentListRequest struct {
Hash string `json:"hash" xml:"hash" form:"hash" query:"hash"`
}
//ParentListResponce はファイル一覧情報取得のレスポンスデータを保持する
type ParentListResponce struct {
Count int `json:"count" xml:"count"`
Folders []ParentListFolderResponce `json:"folders" xml:"folders"`
}
//ParentListFolderResponce はファイル一覧取得レスポンスのファイル情報をを保持する
type ParentListFolderResponce struct {
Hash string `json:"hash" xml:"hash"`
Name string `json:"name" xml:"name"`
}
//ParentListHandler は親フォルダ一覧取得し返す
func ParentListHandler(c echo.Context) error {
req := new(ParentListRequest)
if err := c.Bind(req); err != nil {
return err
}
fmt.Printf("request=%v\n", *req)
//フォルダ情報レスポンスを作成
folders := make([]ParentListFolderResponce, 0)
//ルートを取得
rootFolder, err := db.SelectFolderRoot()
if err != nil {
return err
}
selectHash := req.Hash
if selectHash == "" {
//フォルダハッシュをルートとして取得
selectHash = rootFolder.Hash
}
//現在のフォルダーを取得
selectFolder, err := db.SelectFolderFromHash(selectHash)
if err != nil {
return err
}
folders = append(folders, createFolderItemFromFolder(selectFolder, rootFolder))
//親フォルダをさかのぼって追加
parentHash := selectFolder.ParentHash
for {
if parentHash == "" {
break
}
parentFolder, err := db.SelectFolderFromHash(parentHash)
if err != nil {
break
}
folders = append(folders, createFolderItemFromFolder(parentFolder, rootFolder))
parentHash = parentFolder.ParentHash
}
//レスポンスを作成
responce := new(ParentListResponce)
responce.Count = len(folders)
responce.Folders = folders
return c.JSON(http.StatusOK, responce)
}
func createFolderItemFromFolder(folder db.FolderTable, rootFolder db.FolderTable) ParentListFolderResponce {
name := filepath.Base(folder.FilePath)
if rootFolder.Hash == folder.Hash {
name = "ルートフォルダ"
}
return ParentListFolderResponce{
Hash: folder.Hash,
Name: name,
}
}