Skip to content

gRPCのサーバを接続 / 設定情報をenumで定義 #45

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Sep 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 17 additions & 8 deletions cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,24 @@ import (

"github.com/charmbracelet/bubbles/textinput"
tea "github.com/charmbracelet/bubbletea"
"github.com/cocoide/commitify/util"
"github.com/cocoide/commitify/internal/entity"
"github.com/fatih/color"
"github.com/spf13/cobra"
)

var (
configKey = [...]string{"api-key", "language", "format"}
configOption = [][]string{
configKey = [...]string{"api-key", "language", "format", "ai-source"}
configOption = [][]int{
{},
{"Japanese", "English"},
{"Format 1", "Format 2"},
{int(entity.EN), int(entity.JP)},
{int(entity.NormalFormat), int(entity.EmojiFormat), int(entity.PrefixFormat)},
{int(entity.WrapServer), int(entity.OpenAiAPI)},
}
configOptionLabel = [][]string{
{},
{"English", "Japanese"},
{"Normal Format", "Emoji Format", "PrefixFormat"},
{"Wrap Server", "OpenAI API"},
}
)

Expand Down Expand Up @@ -152,7 +159,7 @@ func (cm configModel) View() string {
b.WriteString(white("設定内容を選んでください:\n"))
b.WriteString(white(" ↑↓の矢印キーで項目を移動、Enterで選択\n"))

for i, option := range configOption[cm.configKeyIndex] {
for i, option := range configOptionLabel[cm.configKeyIndex] {
cyan := color.New(color.FgCyan).SprintFunc()
hiCyan := color.New(color.FgHiCyan).SprintFunc()
if i == cm.configOptionIndex {
Expand Down Expand Up @@ -182,7 +189,7 @@ func init() {
}

func saveConfig(cm configModel) {
currentConfig, err := util.ReadConfig()
currentConfig, err := entity.ReadConfig()
if err != nil {
fmt.Println(err)
}
Expand All @@ -194,9 +201,11 @@ func saveConfig(cm configModel) {
currentConfig.UseLanguage = configOption[cm.configKeyIndex][cm.configOptionIndex]
case 2:
currentConfig.CommitFormat = configOption[cm.configKeyIndex][cm.configOptionIndex]
case 3:
currentConfig.AISource = configOption[cm.configKeyIndex][cm.configOptionIndex]
}

err = util.WriteConfig(currentConfig)
err = entity.WriteConfig(currentConfig)
if err != nil {
fmt.Println(err)
}
Expand Down
57 changes: 27 additions & 30 deletions cmd/suggest.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package cmd

import (
"context"
"fmt"
"log"
"os"
"strings"

tea "github.com/charmbracelet/bubbletea"
"github.com/cocoide/commitify/internal/entity"
"github.com/cocoide/commitify/internal/gateway"
"github.com/cocoide/commitify/internal/service"
"github.com/cocoide/commitify/util"
"github.com/fatih/color"
"github.com/spf13/cobra"
Expand All @@ -18,39 +19,35 @@ type model struct {
currentIdx int
errorMsg string
isLoading bool
messages []string
}

type generateMessages struct {
messages []string
errorMsg string
}
func (m *model) Init() tea.Cmd {
conf, err := entity.ReadConfig()
if err != nil {
log.Fatal("設定情報の取得に失敗: ", err)
}

func (m model) Init() tea.Cmd {
return func() tea.Msg {
ctx := context.Background()
og := gateway.NewOpenAIGateway(ctx)
ms := service.NewMessageService(og)
stagingCode := util.ExecGetStagingCode()
messages, err := ms.GenerateCommitMessage(stagingCode)
if err != nil {
return generateMessages{errorMsg: "メッセージの生成に失敗: " + err.Error()}
}
return generateMessages{messages: messages}
var gi gateway.GatewayInterface
switch conf.AISource {
case int(entity.WrapServer):
gi = gateway.NewGrpcServeGateway()
default:
gi = gateway.NewGrpcServeGateway()
}

messages, err := gi.FetchCommitMessages()
if err != nil {
log.Fatal("コミットメッセージの生成に失敗: ", err)
os.Exit(-1)
}
m.choices = messages
m.isLoading = false

return nil
}

func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
func (m *model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case generateMessages:
if msg.errorMsg != "" {
m.errorMsg = msg.errorMsg
m.isLoading = false
return m, nil
}
m.choices = msg.messages
m.isLoading = false
return m, nil
case tea.KeyMsg:
switch msg.Type {
case tea.KeyUp:
Expand All @@ -74,7 +71,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, nil
}

func (m model) View() string {
func (m *model) View() string {
if m.errorMsg != "" {
red := color.New(color.FgRed).SprintFunc()
return fmt.Sprintf(red(m.errorMsg))
Expand Down Expand Up @@ -109,7 +106,7 @@ var suggestCmd = &cobra.Command{
Aliases: []string{"s", "suggest"},
Run: func(cmd *cobra.Command, args []string) {
m := model{isLoading: true}
p := tea.NewProgram(m)
p := tea.NewProgram(&m)
p.Run()
},
}
Expand Down
16 changes: 8 additions & 8 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ require (
github.com/sashabaranov/go-openai v1.15.1
github.com/spf13/cobra v1.7.0
github.com/spf13/viper v1.16.0
google.golang.org/grpc v1.55.0
google.golang.org/protobuf v1.30.0
google.golang.org/grpc v1.58.0
google.golang.org/protobuf v1.31.0
)

require (
Expand Down Expand Up @@ -46,10 +46,10 @@ require (
github.com/muesli/reflow v0.3.0 // indirect
github.com/muesli/termenv v0.15.1 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
golang.org/x/net v0.10.0 // indirect
golang.org/x/sync v0.1.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/term v0.8.0 // indirect
golang.org/x/text v0.9.0 // indirect
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
golang.org/x/net v0.15.0 // indirect
golang.org/x/sync v0.3.0 // indirect
golang.org/x/sys v0.12.0 // indirect
golang.org/x/term v0.12.0 // indirect
golang.org/x/text v0.13.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
)
32 changes: 16 additions & 16 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -299,8 +299,8 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand All @@ -320,8 +320,8 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
Expand Down Expand Up @@ -361,11 +361,11 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand All @@ -374,8 +374,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
Expand Down Expand Up @@ -492,8 +492,8 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
Expand All @@ -510,8 +510,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag=
google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o=
google.golang.org/grpc v1.58.0/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
Expand All @@ -524,8 +524,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
94 changes: 92 additions & 2 deletions internal/entity/config.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,97 @@
package entity

import (
"encoding/json"
"fmt"

pb "github.com/cocoide/commitify/pkg/grpc"
"github.com/spf13/viper"
)

type Language int

const (
EN Language = iota
JP
)

type CodeFormat int

const (
NormalFormat CodeFormat = iota
EmojiFormat
PrefixFormat
)

type AISource int

const (
WrapServer AISource = iota
OpenAiAPI
)

type Config struct {
ChatGptApiKey string `json:"chatGptApiKey"`
UseLanguage string `json:"UseLanguage"`
CommitFormat string `json:"CommitFormat"`
UseLanguage int `json:"UseLanguage"`
CommitFormat int `json:"CommitFormat"`
AISource int `json:"AISource"`
}

func (c *Config) Config2PbVars() (pb.CodeFormatType, pb.LanguageType) {
var codeFormatType pb.CodeFormatType
switch c.CommitFormat {
case int(EmojiFormat):
codeFormatType = pb.CodeFormatType_EMOJI
case int(PrefixFormat):
codeFormatType = pb.CodeFormatType_PREFIX
default:
codeFormatType = pb.CodeFormatType_NORMAL
}

var languageType pb.LanguageType
switch c.UseLanguage {
case int(JP):
languageType = pb.LanguageType_JAPANESE
default:
languageType = pb.LanguageType_JAPANESE
}

return codeFormatType, languageType
}

func ReadConfig() (Config, error) {
var result Config

viper.AddConfigPath(".")
viper.SetConfigName("config")
viper.SetConfigType("yaml")
if err := viper.ReadInConfig(); err != nil {
return result, fmt.Errorf("error reading config file, %s", err.Error())
}
if err := viper.Unmarshal(&result); err != nil {
return result, fmt.Errorf("unable to decode into struct, %v", err.Error())
}
return result, nil
}

func WriteConfig(config Config) error {
viper.AddConfigPath(".")
viper.SetConfigName("config")
viper.SetConfigType("yaml")
configMap := make(map[string]interface{})
configBytes, err := json.Marshal(config)
if err != nil {
return fmt.Errorf("error marshalling config: %s", err.Error())
}
err = json.Unmarshal(configBytes, &configMap)
if err != nil {
return fmt.Errorf("error unmarshalling config: %s", err.Error())
}
if err := viper.MergeConfigMap(configMap); err != nil {
return err
}
if err := viper.WriteConfig(); err != nil {
return fmt.Errorf("error saving config file, %s", err.Error())
}
return nil
}
5 changes: 5 additions & 0 deletions internal/gateway/gateway_interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package gateway

type GatewayInterface interface {
FetchCommitMessages() ([]string, error)
}
Loading