# homekeeper
服務管理員,日後會將工作上常用到的服務放在裡面,好比變動資料庫、區塊鏈上鏈、爬蟲抓資料等放進來,讓裡面可以有許多現成的微服務,帶了就走

## 資料夾結構
beans 用來裝Call API後之ResultObject

controllers Restful API呼叫用控制器

env 系統設定

route 系統路由設定

main.go 主程式

## 程式運行原理
本系統會啟動一個Restful API

目前它己有一個現成的寄信服務,其他可以依自己做擴充

本系統可以搭配佇列管理員管理員使用,這樣一來你就能安排一些非同步任務行程

https://github.com/teed7334-restore/counter

## 必須套件
本程式透過Google Protobuf 3產生所需之ResultObject,然Proto 3之後官方不支持Custom Tags,所以還需要多安裝一個寫入retags的套件

git clone https://github.com/qianlnk/protobuf.git $GOPATH/src/github.com/golang/protobuf

go install $GOPATH/src/github.com/golang/protobuf/protoc-gen-go

及Restful Framework

go get -u -v github.com/gin-gonic/gin

## 程式操作流程
1. 將./env/env.swp檔名改成env.go
2. 修改./env/env.go並設定您的SMTP Server
3. 到./beans底下,運行protoc --go_out=plugins=grpc+retag:. *.proto
4. go run main.go

## API呼叫網址與參數
寄信服務 http://[Your Host Name]:8806/Mail/SendMail
```
//HTTP Header需設定成Content-Type: application/json
{
    "to": "admin@admin.com",
    "subject": "這是一封測試信",
    "content": "這是一封測試信<br />這是一封測試信<br />這是一封測試信<br />這是一封測試信<br />這是一封測試信<br />"
}
```

取得Redis資料 http://[Your Host Name]:8806/Redis/Get
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "score"
}
```

設定Redis資料 http://[Your Host Name]:8806/Redis/Set
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "score",
    "value": "0"
}
```

對Redis資料進行遞增 http://[Your Host Name]:8806/Redis/Incr
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "score"
}
```

對Redis資料進行遞減 http://[Your Host Name]:8806/Redis/Decr
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "score"
}
```

對Redis資料建立Hashmap http://[Your Host Name]:8806/Redis/HSet
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "profile",
    "hkey": "name",
    "value": "Peter"
}
```

取得建立Hashmap的Redis資料 http://[Your Host Name]:8806/Redis/HGet
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "profile",
    "hkey": "name"
}
```

對Redis進行資料添加,並排除重複項目 http://[Your Host Name]:8806/Redis/SAdd
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "box",
    "value": "Joe"
}
```

取得Key中的資料集合總數 http://[Your Host Name]:8806/Redis/SCard
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "box"
}
```

對Redis中List資料的後面做資料添加 http://[Your Host Name]:8806/Redis/RPush
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "menu",
    "value": "apple"
}
```

對Redis中List資料的前面做資料添加 http://[Your Host Name]:8806/Redis/LPush
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "menu",
    "value": "banana"
}
```

從Redis中List資料的第...列做資料修改 http://[Your Host Name]:8806/Redis/LSet
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "menu",
    "hkey": "1",
    "value": "cherry"
}
```

取得Redis中List特定範圍裡面的資料 http://[Your Host Name]:8806/Redis/LRange
```
//HTTP Header需設定成Content-Type: application/json
{
    "key": "menu",
    "value": "0:5"
}
```

計算休假區間,中間會扣除午休九十分鐘 http://[Your Host Name]:8806/PunchClock/CalcTime
```
//HTTP Header需設定成Content-Type: application/json
{
  "begin":{"year":"2019","month":"6","day":"19","hour":"10","minute":"46"},
  "end":{"year":"2019","month":"6","day":"25","hour":"18","minute":"0"}
}
```

重新設定所有員工休假區間 http://[Your Host Name]:8806/PunchClock/ResetAllUseMinute
```
//HTTP Header需設定成Content-Type: application/json
{}
```

取鏈上取得打卡資料 http://[Your Host Name]:8806/PunchClock/GetEmployeeOnChain
```
//HTTP Header需設定成Content-Type: application/json
{
  "identify":"00190"
}
```

寫入員工卡鐘資料 http://[Your Host Name]:8806/PunchClock/AddEmployeeOnChain
```
//HTTP Header需設定成Content-Type: application/json
{
  "identify":"00192",
  "firstName":"Tony",
  "lastName":"Chen"
}
```

取鏈上取得打卡資料 http://[Your Host Name]:8806/PunchClock/GetPunchclockOnChain
```
//HTTP Header需設定成Content-Type: application/json
{
  "id":"3acde18a-a36b-49de-be4f-b552398b140f"
}
```

寫入員工卡鐘資料 http://[Your Host Name]:8806/PunchClock/AddPunchclockOnChain
```
//HTTP Header需設定成Content-Type: application/json
{
  "id":"20190822.00190",
  "onWorkDate":"2019-08-22",
  "onWorkTime":"09:50",
  "offWorkTime":"20:00",
  "workTimes":"9 hour 1 minute",
  "employee": "00190"
}
```

將每天員工打卡資料上鏈 http://[Your Host Name]:8806/PunchClock/UploadDailyPunchclockData
```
//HTTP Header需設定成Content-Type: application/json
{
  "employee": {
    "identify": "00190",
    "firstName": "Peter",
    "lastName": "Cheng"
  },
  "punchclock": {
    "begin": {
      "year": "2019",
      "month": "08",
      "day": "28",
      "hour": "09",
      "minute": "24",
      "second": "00"
    },
    "end": {
      "year": "2019",
      "month": "08",
      "day": "28",
      "hour": "20",
      "minute": "05",
      "second": "00"
    }
  }
}
```