update editor

This commit is contained in:
Владимир Фёдоров 2025-12-07 01:34:42 +07:00
parent d372104760
commit 09b04de9c3
8 changed files with 209 additions and 109 deletions

View File

@ -199,10 +199,14 @@ message GetGraphRsp {
string label = 2;
string name = 3;
string text = 4;
repeated Application applications = 5;
}
message Edge {
int32 from = 1;
int32 to = 2;
string arrows = 3;
}
message Application {
string name = 1;
}
}

View File

@ -1 +1 @@
:root{--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, .29);--vt-c-divider-light-2: rgba(60, 60, 60, .12);--vt-c-divider-dark-1: rgba(84, 84, 84, .65);--vt-c-divider-dark-2: rgba(84, 84, 84, .48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, .66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, .64);--main-color: rgba(34, 50, 60, 1);--second-color: rgb(97, 74, 22);--main-back-color: rgba(240, 240, 240, 1);--main-back-item-color: rgba(254, 254, 254, 1)}:root{--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px}*,*:before,*:after{box-sizing:border-box;margin:0;font-weight:400}body{min-height:100dvh;color:var(--color-text);background:var(--main-back-color);transition:color .5s,background-color .5s;line-height:1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.input-custom{width:100%;box-sizing:border-box;margin-bottom:15px}.button-custom{margin-left:auto;background-color:var(--main-color);font-weight:600;color:#fff}.button-custom-inline{margin:10px;background-color:var(--main-color);font-weight:600;color:#fff;padding:6px 8px;border:1px solid #ddd;border-radius:15px;font-size:14px}.button-custom:hover,.button-custom-inline:hover{background-color:var(--second-color)}.input-custom,.button-custom{padding:12px 16px;border:1px solid #ddd;border-radius:15px;font-size:16px}.button-container{display:flex}.center-message{display:flex;justify-content:center;align-items:center;height:calc(100dvh - 100px);text-align:center}.qr[data-v-666b8d35]{position:absolute;top:130px;right:30px;text-align:center;width:120px}.header-block[data-v-5b6894ef]{background-color:var(--main-color);font-size:large;color:#fff;vertical-align:middle;padding:10px 0 10px 16px;font-weight:700}.buttons-block[data-v-27835e5c]{padding-top:5px}.button-menu[data-v-27835e5c]{margin:5px 10px 5px 0}table[data-v-27835e5c]{width:700px;border-collapse:collapse;margin:30px auto;border:1px solid #444444}th[data-v-27835e5c],td[data-v-27835e5c]{padding:12px;text-align:left}th[data-v-27835e5c]{background-color:var(--main-color);color:#fff;font-weight:700}tr[data-v-27835e5c]:nth-child(odd){background-color:#efefef}tr[data-v-27835e5c]:nth-child(2n){background-color:#fff}tr[data-v-27835e5c]:hover{background-color:#cfcfcf}.time[data-v-27835e5c]{white-space:nowrap}.team-name[data-v-27835e5c]{font-weight:600}.link-button[data-v-27835e5c]{display:inline;border:none;background:none;padding:0;margin:0;font:inherit;cursor:pointer;color:var(--main-color);text-decoration:underline;font-weight:600;-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:inherit;text-align:left}.link-button[data-v-27835e5c]:hover{color:var(--second-color);text-decoration:none}.link-button[data-v-27835e5c]:active{color:#036}.link-button[data-v-27835e5c]:focus{outline:none;text-decoration:none;box-shadow:0 0 0 2px #0066cc4d}.form-block[data-v-27835e5c]{width:700px;margin:0 auto}a[data-v-27835e5c]{color:var(--second-color);text-decoration:none;transition:all .2s ease;cursor:pointer}a[data-v-27835e5c]:hover{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}a[data-v-27835e5c]:focus-visible{outline:2px solid #3182ce;outline-offset:2px;border-radius:2px}a[disabled][data-v-27835e5c]{color:#a0aec0;pointer-events:none;cursor:not-allowed}.button-container[data-v-27835e5c]{margin-bottom:30px}.cell-center[data-v-27835e5c]{text-align:center}.graph-container[data-v-3bf42da3]{width:100%;height:calc(100vh - 50px);border:1px solid #e0e0e0;border-radius:8px}.nodes-container[data-v-3bf42da3]{position:fixed;left:5px;top:55px;height:calc(100vh - 100px);padding:10px 20px}.edit-node-container[data-v-3bf42da3]{position:fixed;right:5px;top:55px;height:calc(100vh - 100px);padding:10px 20px;max-width:300px}.node-select-button[data-v-3bf42da3]:hover{font-weight:700;cursor:pointer}.selected-node[data-v-3bf42da3]{font-weight:700;color:#960000;cursor:pointer}
:root{--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, .29);--vt-c-divider-light-2: rgba(60, 60, 60, .12);--vt-c-divider-dark-1: rgba(84, 84, 84, .65);--vt-c-divider-dark-2: rgba(84, 84, 84, .48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, .66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, .64);--main-color: rgba(34, 50, 60, 1);--second-color: rgb(97, 74, 22);--main-back-color: rgba(240, 240, 240, 1);--main-back-item-color: rgba(254, 254, 254, 1)}:root{--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px}*,*:before,*:after{box-sizing:border-box;margin:0;font-weight:400}body{min-height:100dvh;color:var(--color-text);background:var(--main-back-color);transition:color .5s,background-color .5s;line-height:1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.input-custom{width:100%;box-sizing:border-box;margin-bottom:15px}.button-custom{margin-left:auto;background-color:var(--main-color);font-weight:600;color:#fff}.button-custom-inline{margin:10px;background-color:var(--main-color);font-weight:600;color:#fff;padding:6px 8px;border:1px solid #ddd;border-radius:15px;font-size:14px}.button-custom:hover,.button-custom-inline:hover{background-color:var(--second-color)}.input-custom,.button-custom{padding:12px 16px;border:1px solid #ddd;border-radius:15px;font-size:16px}.button-container{display:flex}.center-message{display:flex;justify-content:center;align-items:center;height:calc(100dvh - 100px);text-align:center}.qr[data-v-666b8d35]{position:absolute;top:130px;right:30px;text-align:center;width:120px}.header-block[data-v-5b6894ef]{background-color:var(--main-color);font-size:large;color:#fff;vertical-align:middle;padding:10px 0 10px 16px;font-weight:700}.buttons-block[data-v-27835e5c]{padding-top:5px}.button-menu[data-v-27835e5c]{margin:5px 10px 5px 0}table[data-v-27835e5c]{width:700px;border-collapse:collapse;margin:30px auto;border:1px solid #444444}th[data-v-27835e5c],td[data-v-27835e5c]{padding:12px;text-align:left}th[data-v-27835e5c]{background-color:var(--main-color);color:#fff;font-weight:700}tr[data-v-27835e5c]:nth-child(odd){background-color:#efefef}tr[data-v-27835e5c]:nth-child(2n){background-color:#fff}tr[data-v-27835e5c]:hover{background-color:#cfcfcf}.time[data-v-27835e5c]{white-space:nowrap}.team-name[data-v-27835e5c]{font-weight:600}.link-button[data-v-27835e5c]{display:inline;border:none;background:none;padding:0;margin:0;font:inherit;cursor:pointer;color:var(--main-color);text-decoration:underline;font-weight:600;-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:inherit;text-align:left}.link-button[data-v-27835e5c]:hover{color:var(--second-color);text-decoration:none}.link-button[data-v-27835e5c]:active{color:#036}.link-button[data-v-27835e5c]:focus{outline:none;text-decoration:none;box-shadow:0 0 0 2px #0066cc4d}.form-block[data-v-27835e5c]{width:700px;margin:0 auto}a[data-v-27835e5c]{color:var(--second-color);text-decoration:none;transition:all .2s ease;cursor:pointer}a[data-v-27835e5c]:hover{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}a[data-v-27835e5c]:focus-visible{outline:2px solid #3182ce;outline-offset:2px;border-radius:2px}a[disabled][data-v-27835e5c]{color:#a0aec0;pointer-events:none;cursor:not-allowed}.button-container[data-v-27835e5c]{margin-bottom:30px}.cell-center[data-v-27835e5c]{text-align:center}.graph-container[data-v-22fb1d18]{width:100%;height:calc(100vh - 50px);border:1px solid #e0e0e0;border-radius:8px}.nodes-container[data-v-22fb1d18]{position:fixed;left:5px;top:55px;height:calc(100vh - 100px);padding:10px 20px}.edit-node-container[data-v-22fb1d18]{position:fixed;right:5px;top:55px;height:calc(100vh - 100px);padding:10px 20px;max-width:300px}.node-select-button[data-v-22fb1d18]{color:#373737}.node-select-button[data-v-22fb1d18]:hover{font-weight:700;cursor:pointer}.selected-node[data-v-22fb1d18]{font-weight:700;color:#960000;cursor:pointer}

View File

@ -5,8 +5,8 @@
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ВД Админка</title>
<script type="module" crossorigin src="/assets/index-B5Qzu2vG.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DZKvHw51.css">
<script type="module" crossorigin src="/assets/index-C6nQe7QU.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DQOm-aLN.css">
</head>
<body>
<div id="app"></div>

View File

@ -204,11 +204,21 @@ func (s *Services) GetGraph(ctx context.Context, req *proto.GetGraphReq) (*proto
graph := s.storyService.GetGraph(ctx)
nodes := make([]*proto.GetGraphRsp_Node, 0, len(graph.Nodes))
for _, node := range graph.Nodes {
applications := make([]*proto.GetGraphRsp_Application, 0, len(node.Applications))
for _, application := range node.Applications {
applications = append(
applications,
&proto.GetGraphRsp_Application{
Name: application.Name,
},
)
}
nodes = append(nodes, &proto.GetGraphRsp_Node{
Id: node.ID,
Label: node.Label,
Name: node.Name,
Text: node.Text,
Id: node.ID,
Label: node.Label,
Name: node.Name,
Text: node.Text,
Applications: applications,
})
}
edges := make([]*proto.GetGraphRsp_Edge, 0, len(graph.Edges))

View File

@ -39,25 +39,30 @@ type Place struct {
Applications []*Application `json:"applications"`
}
type Application struct {
Name string `json:"name"`
}
type Graph struct {
Nodes []*Node
Edges []*Edge
Nodes []*GraphNode
Edges []*GraphEdge
}
type Node struct {
ID int32
Label string
Name string
Text string
type GraphNode struct {
ID int32
Label string
Name string
Text string
Applications []*GraphApplication
}
type Edge struct {
type GraphEdge struct {
From int32
To int32
}
type Application struct {
Name string `json:"name"`
type GraphApplication struct {
Name string
}
type StoryService struct {
@ -107,26 +112,36 @@ func (s *StoryService) GetPlace(code string) *Place {
func (s *StoryService) GetGraph(ctx context.Context) *Graph {
m := make(map[string]int32, len(s.story.Places))
nodes := make([]*Node, 0, len(s.story.Places))
nodes := make([]*GraphNode, 0, len(s.story.Places))
for i, place := range s.story.Places {
m[clearCode(place.Code)] = int32(i)
applications := make([]*GraphApplication, 0, len(place.Applications))
for _, application := range place.Applications {
applications = append(
applications,
&GraphApplication{
Name: application.Name,
},
)
}
nodes = append(
nodes, &Node{
ID: int32(i),
Label: place.Code,
Name: place.Name,
Text: place.Text,
nodes, &GraphNode{
ID: int32(i),
Label: place.Code,
Name: place.Name,
Text: place.Text,
Applications: applications,
},
)
}
edges := make([]*Edge, 0, len(s.story.Places)*3)
edges := make([]*GraphEdge, 0, len(s.story.Places)*3)
for _, place := range s.story.Places {
re := regexp.MustCompile(`\(\[[a-zA-Zа-яА-Я\d-]+\]\)`)
matches := re.FindAllString(place.Text, -1)
for _, match := range matches {
edges = append(edges, &Edge{
edges = append(edges, &GraphEdge{
From: m[clearCode(place.Code)],
To: m[clearMatch(match)],
})

View File

@ -1355,11 +1355,12 @@ func (x *GetGraphRsp) GetCountEdges() int32 {
}
type GetGraphRsp_Node struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
Text string `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"`
state protoimpl.MessageState `protogen:"open.v1"`
Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
Text string `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"`
Applications []*GetGraphRsp_Application `protobuf:"bytes,5,rep,name=applications,proto3" json:"applications,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -1422,6 +1423,13 @@ func (x *GetGraphRsp_Node) GetText() string {
return ""
}
func (x *GetGraphRsp_Node) GetApplications() []*GetGraphRsp_Application {
if x != nil {
return x.Applications
}
return nil
}
type GetGraphRsp_Edge struct {
state protoimpl.MessageState `protogen:"open.v1"`
From int32 `protobuf:"varint,1,opt,name=from,proto3" json:"from,omitempty"`
@ -1482,6 +1490,50 @@ func (x *GetGraphRsp_Edge) GetArrows() string {
return ""
}
type GetGraphRsp_Application struct {
state protoimpl.MessageState `protogen:"open.v1"`
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *GetGraphRsp_Application) Reset() {
*x = GetGraphRsp_Application{}
mi := &file_main_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *GetGraphRsp_Application) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetGraphRsp_Application) ProtoMessage() {}
func (x *GetGraphRsp_Application) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[31]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetGraphRsp_Application.ProtoReflect.Descriptor instead.
func (*GetGraphRsp_Application) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{28, 2}
}
func (x *GetGraphRsp_Application) GetName() string {
if x != nil {
return x.Name
}
return ""
}
var File_main_proto protoreflect.FileDescriptor
const file_main_proto_rawDesc = "" +
@ -1551,7 +1603,7 @@ const file_main_proto_rawDesc = "" +
"\x1bDownloadTeamsQrCodesFileReq\"5\n" +
"\x1bDownloadTeamsQrCodesFileRsp\x12\x16\n" +
"\x06result\x18\x01 \x01(\fR\x06result\"\r\n" +
"\vGetGraphReq\"\xe9\x02\n" +
"\vGetGraphReq\"\xe3\x03\n" +
"\vGetGraphRsp\x12?\n" +
"\x05nodes\x18\x01 \x03(\v2).crabs.evening_detective.GetGraphRsp.NodeR\x05nodes\x12?\n" +
"\x05edges\x18\x02 \x03(\v2).crabs.evening_detective.GetGraphRsp.EdgeR\x05edges\x12\x1e\n" +
@ -1560,16 +1612,19 @@ const file_main_proto_rawDesc = "" +
"countNodes\x12\x1e\n" +
"\n" +
"countEdges\x18\x04 \x01(\x05R\n" +
"countEdges\x1aT\n" +
"countEdges\x1a\xaa\x01\n" +
"\x04Node\x12\x0e\n" +
"\x02id\x18\x01 \x01(\x05R\x02id\x12\x14\n" +
"\x05label\x18\x02 \x01(\tR\x05label\x12\x12\n" +
"\x04name\x18\x03 \x01(\tR\x04name\x12\x12\n" +
"\x04text\x18\x04 \x01(\tR\x04text\x1aB\n" +
"\x04text\x18\x04 \x01(\tR\x04text\x12T\n" +
"\fapplications\x18\x05 \x03(\v20.crabs.evening_detective.GetGraphRsp.ApplicationR\fapplications\x1aB\n" +
"\x04Edge\x12\x12\n" +
"\x04from\x18\x01 \x01(\x05R\x04from\x12\x0e\n" +
"\x02to\x18\x02 \x01(\x05R\x02to\x12\x16\n" +
"\x06arrows\x18\x03 \x01(\tR\x06arrows2\xed\n" +
"\x06arrows\x18\x03 \x01(\tR\x06arrows\x1a!\n" +
"\vApplication\x12\x12\n" +
"\x04name\x18\x01 \x01(\tR\x04name2\xed\n" +
"\n" +
"\x10EveningDetective\x12Y\n" +
"\x04Ping\x12 .crabs.evening_detective.PingReq\x1a .crabs.evening_detective.PingRsp\"\r\x82\xd3\xe4\x93\x02\a\x12\x05/ping\x12i\n" +
@ -1599,7 +1654,7 @@ func file_main_proto_rawDescGZIP() []byte {
return file_main_proto_rawDescData
}
var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 31)
var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 32)
var file_main_proto_goTypes = []any{
(*PingReq)(nil), // 0: crabs.evening_detective.PingReq
(*PingRsp)(nil), // 1: crabs.evening_detective.PingRsp
@ -1632,6 +1687,7 @@ var file_main_proto_goTypes = []any{
(*GetGraphRsp)(nil), // 28: crabs.evening_detective.GetGraphRsp
(*GetGraphRsp_Node)(nil), // 29: crabs.evening_detective.GetGraphRsp.Node
(*GetGraphRsp_Edge)(nil), // 30: crabs.evening_detective.GetGraphRsp.Edge
(*GetGraphRsp_Application)(nil), // 31: crabs.evening_detective.GetGraphRsp.Application
}
var file_main_proto_depIdxs = []int32{
3, // 0: crabs.evening_detective.AddTeamsReq.teams:type_name -> crabs.evening_detective.Team
@ -1643,35 +1699,36 @@ var file_main_proto_depIdxs = []int32{
11, // 6: crabs.evening_detective.GiveApplicationsReq.applications:type_name -> crabs.evening_detective.Application
29, // 7: crabs.evening_detective.GetGraphRsp.nodes:type_name -> crabs.evening_detective.GetGraphRsp.Node
30, // 8: crabs.evening_detective.GetGraphRsp.edges:type_name -> crabs.evening_detective.GetGraphRsp.Edge
0, // 9: crabs.evening_detective.EveningDetective.Ping:input_type -> crabs.evening_detective.PingReq
2, // 10: crabs.evening_detective.EveningDetective.AddTeams:input_type -> crabs.evening_detective.AddTeamsReq
6, // 11: crabs.evening_detective.EveningDetective.GetTeams:input_type -> crabs.evening_detective.GetTeamsReq
8, // 12: crabs.evening_detective.EveningDetective.GetTeamsCSV:input_type -> crabs.evening_detective.GetTeamsCSVReq
12, // 13: crabs.evening_detective.EveningDetective.GetTeam:input_type -> crabs.evening_detective.GetTeamReq
14, // 14: crabs.evening_detective.EveningDetective.AddAction:input_type -> crabs.evening_detective.AddActionReq
17, // 15: crabs.evening_detective.EveningDetective.GetGame:input_type -> crabs.evening_detective.GetGameReq
19, // 16: crabs.evening_detective.EveningDetective.GameStart:input_type -> crabs.evening_detective.GameStartReq
21, // 17: crabs.evening_detective.EveningDetective.GameStop:input_type -> crabs.evening_detective.GameStopReq
23, // 18: crabs.evening_detective.EveningDetective.GiveApplications:input_type -> crabs.evening_detective.GiveApplicationsReq
25, // 19: crabs.evening_detective.EveningDetective.DownloadTeamsQrCodesFile:input_type -> crabs.evening_detective.DownloadTeamsQrCodesFileReq
27, // 20: crabs.evening_detective.EveningDetective.GetGraph:input_type -> crabs.evening_detective.GetGraphReq
1, // 21: crabs.evening_detective.EveningDetective.Ping:output_type -> crabs.evening_detective.PingRsp
4, // 22: crabs.evening_detective.EveningDetective.AddTeams:output_type -> crabs.evening_detective.AddTeamsRsp
7, // 23: crabs.evening_detective.EveningDetective.GetTeams:output_type -> crabs.evening_detective.GetTeamsRsp
9, // 24: crabs.evening_detective.EveningDetective.GetTeamsCSV:output_type -> crabs.evening_detective.GetTeamsCSVRsp
13, // 25: crabs.evening_detective.EveningDetective.GetTeam:output_type -> crabs.evening_detective.GetTeamRsp
15, // 26: crabs.evening_detective.EveningDetective.AddAction:output_type -> crabs.evening_detective.AddActionRsp
18, // 27: crabs.evening_detective.EveningDetective.GetGame:output_type -> crabs.evening_detective.GetGameRsp
20, // 28: crabs.evening_detective.EveningDetective.GameStart:output_type -> crabs.evening_detective.GameStartRsp
22, // 29: crabs.evening_detective.EveningDetective.GameStop:output_type -> crabs.evening_detective.GameStopRsp
24, // 30: crabs.evening_detective.EveningDetective.GiveApplications:output_type -> crabs.evening_detective.GiveApplicationsRsp
26, // 31: crabs.evening_detective.EveningDetective.DownloadTeamsQrCodesFile:output_type -> crabs.evening_detective.DownloadTeamsQrCodesFileRsp
28, // 32: crabs.evening_detective.EveningDetective.GetGraph:output_type -> crabs.evening_detective.GetGraphRsp
21, // [21:33] is the sub-list for method output_type
9, // [9:21] is the sub-list for method input_type
9, // [9:9] is the sub-list for extension type_name
9, // [9:9] is the sub-list for extension extendee
0, // [0:9] is the sub-list for field type_name
31, // 9: crabs.evening_detective.GetGraphRsp.Node.applications:type_name -> crabs.evening_detective.GetGraphRsp.Application
0, // 10: crabs.evening_detective.EveningDetective.Ping:input_type -> crabs.evening_detective.PingReq
2, // 11: crabs.evening_detective.EveningDetective.AddTeams:input_type -> crabs.evening_detective.AddTeamsReq
6, // 12: crabs.evening_detective.EveningDetective.GetTeams:input_type -> crabs.evening_detective.GetTeamsReq
8, // 13: crabs.evening_detective.EveningDetective.GetTeamsCSV:input_type -> crabs.evening_detective.GetTeamsCSVReq
12, // 14: crabs.evening_detective.EveningDetective.GetTeam:input_type -> crabs.evening_detective.GetTeamReq
14, // 15: crabs.evening_detective.EveningDetective.AddAction:input_type -> crabs.evening_detective.AddActionReq
17, // 16: crabs.evening_detective.EveningDetective.GetGame:input_type -> crabs.evening_detective.GetGameReq
19, // 17: crabs.evening_detective.EveningDetective.GameStart:input_type -> crabs.evening_detective.GameStartReq
21, // 18: crabs.evening_detective.EveningDetective.GameStop:input_type -> crabs.evening_detective.GameStopReq
23, // 19: crabs.evening_detective.EveningDetective.GiveApplications:input_type -> crabs.evening_detective.GiveApplicationsReq
25, // 20: crabs.evening_detective.EveningDetective.DownloadTeamsQrCodesFile:input_type -> crabs.evening_detective.DownloadTeamsQrCodesFileReq
27, // 21: crabs.evening_detective.EveningDetective.GetGraph:input_type -> crabs.evening_detective.GetGraphReq
1, // 22: crabs.evening_detective.EveningDetective.Ping:output_type -> crabs.evening_detective.PingRsp
4, // 23: crabs.evening_detective.EveningDetective.AddTeams:output_type -> crabs.evening_detective.AddTeamsRsp
7, // 24: crabs.evening_detective.EveningDetective.GetTeams:output_type -> crabs.evening_detective.GetTeamsRsp
9, // 25: crabs.evening_detective.EveningDetective.GetTeamsCSV:output_type -> crabs.evening_detective.GetTeamsCSVRsp
13, // 26: crabs.evening_detective.EveningDetective.GetTeam:output_type -> crabs.evening_detective.GetTeamRsp
15, // 27: crabs.evening_detective.EveningDetective.AddAction:output_type -> crabs.evening_detective.AddActionRsp
18, // 28: crabs.evening_detective.EveningDetective.GetGame:output_type -> crabs.evening_detective.GetGameRsp
20, // 29: crabs.evening_detective.EveningDetective.GameStart:output_type -> crabs.evening_detective.GameStartRsp
22, // 30: crabs.evening_detective.EveningDetective.GameStop:output_type -> crabs.evening_detective.GameStopRsp
24, // 31: crabs.evening_detective.EveningDetective.GiveApplications:output_type -> crabs.evening_detective.GiveApplicationsRsp
26, // 32: crabs.evening_detective.EveningDetective.DownloadTeamsQrCodesFile:output_type -> crabs.evening_detective.DownloadTeamsQrCodesFileRsp
28, // 33: crabs.evening_detective.EveningDetective.GetGraph:output_type -> crabs.evening_detective.GetGraphRsp
22, // [22:34] is the sub-list for method output_type
10, // [10:22] is the sub-list for method input_type
10, // [10:10] is the sub-list for extension type_name
10, // [10:10] is the sub-list for extension extendee
0, // [0:10] is the sub-list for field type_name
}
func init() { file_main_proto_init() }
@ -1685,7 +1742,7 @@ func file_main_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_main_proto_rawDesc), len(file_main_proto_rawDesc)),
NumEnums: 0,
NumMessages: 31,
NumMessages: 32,
NumExtensions: 0,
NumServices: 1,
},

View File

@ -363,6 +363,27 @@
},
"text": {
"type": "string"
},
"applications": {
"type": "array",
"items": {
"$ref": "#/definitions/evening_detectiveGetGraphRspApplication"
}
}
}
},
"crabsevening_detectiveApplication": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "int64"
},
"name": {
"type": "string"
},
"state": {
"type": "string"
}
}
},
@ -385,7 +406,7 @@
"applications": {
"type": "array",
"items": {
"$ref": "#/definitions/evening_detectiveApplication"
"$ref": "#/definitions/crabsevening_detectiveApplication"
}
}
}
@ -423,21 +444,6 @@
}
}
},
"evening_detectiveApplication": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "int64"
},
"name": {
"type": "string"
},
"state": {
"type": "string"
}
}
},
"evening_detectiveDownloadTeamsQrCodesFileRsp": {
"type": "object",
"properties": {
@ -504,6 +510,14 @@
}
}
},
"evening_detectiveGetGraphRspApplication": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
},
"evening_detectiveGetTeamRsp": {
"type": "object",
"properties": {
@ -547,7 +561,7 @@
"applications": {
"type": "array",
"items": {
"$ref": "#/definitions/evening_detectiveApplication"
"$ref": "#/definitions/crabsevening_detectiveApplication"
}
}
}
@ -589,7 +603,7 @@
"applications": {
"type": "array",
"items": {
"$ref": "#/definitions/evening_detectiveApplication"
"$ref": "#/definitions/crabsevening_detectiveApplication"
}
}
}