other_diagrams.go 8.2 KB

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