other_diagrams.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. // Other diagram types based on mermaid.js parsers
  2. package ast
  3. // ERDiagram represents an entity relationship diagram
  4. type ERDiagram struct {
  5. Entities map[string]*EREntity `json:"entities"`
  6. Relations []*ERRelation `json:"relations"`
  7. Title *string `json:"title,omitempty"`
  8. Config map[string]any `json:"config,omitempty"`
  9. }
  10. type EREntity struct {
  11. ID string `json:"id"`
  12. Name string `json:"name"`
  13. Attributes []*ERAttribute `json:"attributes"`
  14. CssClasses []string `json:"cssClasses,omitempty"`
  15. }
  16. type ERAttribute struct {
  17. Name string `json:"name"`
  18. Type string `json:"type"`
  19. Key *ERKeyType `json:"key,omitempty"`
  20. Comment *string `json:"comment,omitempty"`
  21. }
  22. type ERKeyType string
  23. const (
  24. ERKeyPrimary ERKeyType = "PK"
  25. ERKeyForeign ERKeyType = "FK"
  26. ERKeyUnique ERKeyType = "UK"
  27. )
  28. type ERRelation struct {
  29. From string `json:"from"`
  30. To string `json:"to"`
  31. Type ERRelationType `json:"type"`
  32. Label *string `json:"label,omitempty"`
  33. Cardinality *ERCardinality `json:"cardinality,omitempty"`
  34. }
  35. type ERRelationType string
  36. const (
  37. ERRelationOneToOne ERRelationType = "||--||"
  38. ERRelationOneToMany ERRelationType = "||--o{"
  39. ERRelationManyToOne ERRelationType = "}o--||"
  40. ERRelationManyToMany ERRelationType = "}o--o{"
  41. ERRelationZeroToOne ERRelationType = "||--o|"
  42. ERRelationZeroToMany ERRelationType = "||--o{"
  43. )
  44. type ERCardinality struct {
  45. From string `json:"from"`
  46. To string `json:"to"`
  47. }
  48. // GanttDiagram represents a Gantt chart
  49. type GanttDiagram struct {
  50. Title *string `json:"title,omitempty"`
  51. DateFormat string `json:"dateFormat"`
  52. AxisFormat string `json:"axisFormat"`
  53. Sections []*GanttSection `json:"sections"`
  54. Tasks []*GanttTask `json:"tasks"`
  55. Config map[string]any `json:"config,omitempty"`
  56. }
  57. type GanttSection struct {
  58. Name string `json:"name"`
  59. Tasks []*GanttTask `json:"tasks"`
  60. }
  61. type GanttTask struct {
  62. ID string `json:"id"`
  63. Name string `json:"name"`
  64. Status GanttStatus `json:"status"`
  65. Start *string `json:"start,omitempty"`
  66. End *string `json:"end,omitempty"`
  67. Duration *string `json:"duration,omitempty"`
  68. Dependencies []string `json:"dependencies,omitempty"`
  69. }
  70. type GanttStatus string
  71. const (
  72. GanttStatusActive GanttStatus = "active"
  73. GanttStatusDone GanttStatus = "done"
  74. GanttStatusCrit GanttStatus = "crit"
  75. )
  76. // PieChart represents a pie chart
  77. type PieChart struct {
  78. Title *string `json:"title,omitempty"`
  79. Data []*PieSlice `json:"data"`
  80. Config map[string]any `json:"config,omitempty"`
  81. }
  82. type PieSlice struct {
  83. Label string `json:"label"`
  84. Value float64 `json:"value"`
  85. }
  86. // TimelineDiagram represents a timeline diagram
  87. type TimelineDiagram struct {
  88. Title *string `json:"title,omitempty"`
  89. Sections []*TimelineSection `json:"sections"`
  90. Config map[string]any `json:"config,omitempty"`
  91. }
  92. type TimelineSection struct {
  93. Name string `json:"name"`
  94. Events []*TimelineEvent `json:"events"`
  95. }
  96. type TimelineEvent struct {
  97. Name string `json:"name"`
  98. Description *string `json:"description,omitempty"`
  99. Time *string `json:"time,omitempty"`
  100. }
  101. // UserJourneyDiagram represents a user journey diagram
  102. type UserJourneyDiagram struct {
  103. Title *string `json:"title,omitempty"`
  104. Sections []*UserJourneySection `json:"sections"`
  105. Config map[string]any `json:"config,omitempty"`
  106. }
  107. type UserJourneySection struct {
  108. Name string `json:"name"`
  109. Tasks []*UserJourneyTask `json:"tasks"`
  110. }
  111. type UserJourneyTask struct {
  112. Name string `json:"name"`
  113. Score *float64 `json:"score,omitempty"`
  114. People []string `json:"people,omitempty"`
  115. }
  116. // QuadrantChart represents a quadrant chart
  117. type QuadrantChart struct {
  118. Title *string `json:"title,omitempty"`
  119. XAxis *QuadrantAxis `json:"xAxis,omitempty"`
  120. YAxis *QuadrantAxis `json:"yAxis,omitempty"`
  121. Quadrants []*QuadrantData `json:"quadrants"`
  122. Points []*QuadrantPoint `json:"points"`
  123. Config map[string]any `json:"config,omitempty"`
  124. }
  125. type QuadrantAxis struct {
  126. Label string `json:"label"`
  127. Min float64 `json:"min"`
  128. Max float64 `json:"max"`
  129. }
  130. type QuadrantData struct {
  131. Name string `json:"name"`
  132. Description string `json:"description"`
  133. }
  134. type QuadrantPoint struct {
  135. Name string `json:"name"`
  136. X float64 `json:"x"`
  137. Y float64 `json:"y"`
  138. }
  139. // RequirementDiagram represents a requirement diagram
  140. type RequirementDiagram struct {
  141. Requirements []*Requirement `json:"requirements"`
  142. Elements []*RequirementElement `json:"elements"`
  143. Relations []*RequirementRelation `json:"relations"`
  144. Config map[string]any `json:"config,omitempty"`
  145. }
  146. type Requirement struct {
  147. ID string `json:"id"`
  148. Name string `json:"name"`
  149. Type RequirementType `json:"type"`
  150. Text *string `json:"text,omitempty"`
  151. Risk *RequirementRisk `json:"risk,omitempty"`
  152. Verification *RequirementVerification `json:"verification,omitempty"`
  153. }
  154. type RequirementType string
  155. const (
  156. RequirementTypeRequirement RequirementType = "requirement"
  157. RequirementTypeFunctionalRequirement RequirementType = "functionalRequirement"
  158. RequirementTypeInterfaceRequirement RequirementType = "interfaceRequirement"
  159. RequirementTypePerformanceRequirement RequirementType = "performanceRequirement"
  160. RequirementTypePhysicalRequirement RequirementType = "physicalRequirement"
  161. RequirementTypeDesignConstraint RequirementType = "designConstraint"
  162. )
  163. type RequirementRisk string
  164. const (
  165. RequirementRiskLow RequirementRisk = "low"
  166. RequirementRiskMedium RequirementRisk = "medium"
  167. RequirementRiskHigh RequirementRisk = "high"
  168. )
  169. type RequirementVerification string
  170. const (
  171. RequirementVerificationAnalysis RequirementVerification = "analysis"
  172. RequirementVerificationInspection RequirementVerification = "inspection"
  173. RequirementVerificationTest RequirementVerification = "test"
  174. RequirementVerificationDemonstration RequirementVerification = "demonstration"
  175. )
  176. type RequirementElement struct {
  177. ID string `json:"id"`
  178. Name string `json:"name"`
  179. Type string `json:"type"`
  180. DocRef *string `json:"docRef,omitempty"`
  181. }
  182. type RequirementRelation struct {
  183. From string `json:"from"`
  184. To string `json:"to"`
  185. Type RequirementRelationType `json:"type"`
  186. }
  187. type RequirementRelationType string
  188. const (
  189. RequirementRelationContains RequirementRelationType = "contains"
  190. RequirementRelationCopies RequirementRelationType = "copies"
  191. RequirementRelationDerives RequirementRelationType = "derives"
  192. RequirementRelationSatisfies RequirementRelationType = "satisfies"
  193. RequirementRelationVerifies RequirementRelationType = "verifies"
  194. RequirementRelationRefines RequirementRelationType = "refines"
  195. RequirementRelationTraces RequirementRelationType = "traces"
  196. )
  197. // Type methods for all diagram types
  198. func (e *ERDiagram) Type() DiagramType { return DiagramTypeERDiagram }
  199. func (e *ERDiagram) Validate() error { return nil }
  200. func (g *GanttDiagram) Type() DiagramType { return DiagramTypeGantt }
  201. func (g *GanttDiagram) Validate() error { return nil }
  202. func (p *PieChart) Type() DiagramType { return DiagramTypePie }
  203. func (p *PieChart) Validate() error { return nil }
  204. func (t *TimelineDiagram) Type() DiagramType { return DiagramTypeTimeline }
  205. func (t *TimelineDiagram) Validate() error { return nil }
  206. func (u *UserJourneyDiagram) Type() DiagramType { return DiagramTypeUserJourney }
  207. func (u *UserJourneyDiagram) Validate() error { return nil }
  208. func (q *QuadrantChart) Type() DiagramType { return DiagramTypeQuadrant }
  209. func (q *QuadrantChart) Validate() error { return nil }
  210. func (r *RequirementDiagram) Type() DiagramType { return DiagramTypeRequirement }
  211. func (r *RequirementDiagram) Validate() error { return nil }
  212. // Constructor functions
  213. func NewERDiagram() *ERDiagram {
  214. return &ERDiagram{
  215. Entities: make(map[string]*EREntity),
  216. Relations: make([]*ERRelation, 0),
  217. Config: make(map[string]any),
  218. }
  219. }