Skip to content
Snippets Groups Projects
Commit 2e3cd0fa authored by Cecile Ntsama's avatar Cecile Ntsama
Browse files

Merge conflict in web.go resolved

parents a720c7c8 2cbb9561
No related branches found
No related tags found
1 merge request!4merge dev to main
......@@ -383,14 +383,19 @@ func registerNavigation(appCtx *hctx.AppCtx, webCtx *web.Ctx) {
Position: 100,
})
// Projekt-Sammlung Button
// GEÄNDERT: URL korrigiert von "/project/list" zu "/project/list"
webCtx.Navigation.Add("eiffel.project.collection", web.NavItem{
<<<<<<< HEAD
URL: "/project/list", // Die URL zu deiner Projekt-Sammlung-Seite
Name: "Projekt-Sammlung", // Der Name, der angezeigt wird
=======
URL: "/project/list", // Korrekte URL für das neue Project-Modul
Name: "Projekt-Sammlung",
>>>>>>> 2cbb95617aafc4005076b095bfb267b99d92f96d
Display: func(io web.IO) (bool, error) {
return true, nil
},
Position: 110, // Position in der Navigation; erscheint direkt nach dem EIFFEL-Button
Position: 110,
})
}
......
......@@ -13,40 +13,40 @@ import (
type Project struct {
// ID is the unique MongoDB ObjectID that serves as the primary key
// The omitempty tag excludes this field if it's empty during insertion
ID primitive.ObjectID bson:"_id,omitempty" json:"id"
ID primitive.ObjectID `bson:"_id,omitempty" json:"id"`
// ProjectID is a human-readable unique identifier (e.g., "PRJ-2025-001")
// This allows users to reference projects with meaningful IDs
ProjectID string bson:"project_id" json:"projectId"
ProjectID string `bson:"project_id" json:"projectId"`
// Name is the display name of the project (e.g., "HARMONY Mobile")
// This is what users see in the interface as the project title
Name string bson:"name" json:"name"
Name string `bson:"name" json:"name"`
// Description provides detailed information about the project's purpose
// This field is optional and can be empty for simple projects
Description string bson:"description" json:"description"
Description string `bson:"description" json:"description"`
// StartDate defines when the project begins
// Used for project timeline calculations and reporting
StartDate time.Time bson:"start_date" json:"startDate"
StartDate time.Time `bson:"start_date" json:"startDate"`
// EndDate defines when the project is scheduled to complete
// Must be after StartDate as enforced by business logic
EndDate time.Time bson:"end_date" json:"endDate"
EndDate time.Time `bson:"end_date" json:"endDate"`
// CreatedBy stores the UUID of the user who created this project
// This establishes ownership and is used for access control
CreatedBy uuid.UUID bson:"created_by" json:"createdBy"
CreatedBy uuid.UUID `bson:"created_by" json:"createdBy"`
// CreatedAt records when this project was first created
// Automatically set during project creation for audit trails
CreatedAt time.Time bson:"created_at" json:"createdAt"
CreatedAt time.Time `bson:"created_at" json:"createdAt"`
// UpdatedAt tracks the last modification time
// Uses pointer to allow nil values when no updates have occurred
// The omitempty tag excludes this field if it's nil
UpdatedAt *time.Time bson:"updated_at,omitempty" json:"updatedAt,omitempty"
UpdatedAt *time.Time `bson:"updated_at,omitempty" json:"updatedAt,omitempty"`
}
// ProjectToCreate represents the data structure used when creating new projects
......@@ -55,28 +55,26 @@ type Project struct {
type ProjectToCreate struct {
// ProjectID must be provided by the user and must be unique
// Validation ensures this field is not empty
ProjectID string json:"projectId" hvalidate:"required"
ProjectID string `json:"projectId" hvalidate:"required"`
// Name is required and serves as the display title
// Validation ensures this field is not empty
Name string json:"name" hvalidate:"required"
Name string `json:"name" hvalidate:"required"`
// Description is optional and can be left empty
// No validation constraints are applied to this field
Description string json:"description"
Description string `json:"description"`
// StartDate is required and must be a valid date
// Validation ensures this field is provided
StartDate time.Time json:"startDate" hvalidate:"required"
StartDate time.Time `json:"startDate" hvalidate:"required"`
// EndDate is required and must be after StartDate
// Basic validation ensures this field is provided
// Business logic validation ensures it's after StartDate
EndDate time.Time json:"endDate" hvalidate:"required"
EndDate time.Time `json:"endDate" hvalidate:"required"`
// CreatedBy is set by the system based on the current user
// The - tag excludes this from JSON serialization as it's not user input
CreatedBy uuid.UUID json:"-"
CreatedBy uuid.UUID `json:"-"`
}
// ProjectToUpdate represents the data structure used when updating existing projects
......@@ -85,23 +83,23 @@ type ProjectToCreate struct {
type ProjectToUpdate struct {
// ID identifies which project to update using the MongoDB ObjectID
// This field is populated from the URL parameter
ID primitive.ObjectID bson:"_id" json:"id"
ID primitive.ObjectID `bson:"_id" json:"id"`
// Name can be updated and is required to be non-empty
// Users can change the display name of their projects
Name string json:"name" hvalidate:"required"
Name string `json:"name" hvalidate:"required"`
// Description can be updated and can be empty
// Users can modify or clear the project description
Description string json:"description"
Description string `json:"description"`
// StartDate can be updated but must remain valid
// Users can adjust project timelines as needed
StartDate time.Time json:"startDate" hvalidate:"required"
StartDate time.Time `json:"startDate" hvalidate:"required"`
// EndDate can be updated but must remain after StartDate
// Business logic validation ensures timeline consistency
EndDate time.Time json:"endDate" hvalidate:"required"
EndDate time.Time `json:"endDate" hvalidate:"required"`
}
// ToUpdate converts a Project instance to a ProjectToUpdate structure
......@@ -127,11 +125,11 @@ type ProjectWithRequirements struct {
// Requirements contains summary information for all requirements in this project
// This is optimized for display purposes rather than full requirement details
Requirements []*RequirementSummary json:"requirements"
Requirements []*RequirementSummary `json:"requirements"`
// RequirementCount provides a quick count of total requirements
// This avoids the need to calculate len(Requirements) in templates
RequirementCount int json:"requirementCount"
RequirementCount int `json:"requirementCount"`
}
// RequirementSummary provides essential requirement information for project views
......@@ -140,29 +138,27 @@ type ProjectWithRequirements struct {
type RequirementSummary struct {
// ID is the unique MongoDB ObjectID for this requirement
// Used for linking to detailed requirement views
ID primitive.ObjectID bson:"_id" json:"id"
ID primitive.ObjectID `bson:"_id" json:"id"`
// RequirementID is a human-readable identifier for this requirement
// Generated automatically if not provided (e.g., "REQ-abc123")
RequirementID string bson:"requirement_id" json:"requirementId"
RequirementID string `bson:"requirement_id" json:"requirementId"`
// Condition describes the circumstances under which this requirement applies
// This field comes from the requirement parsing and validation process
Condition string bson:"condition" json:"condition"
Condition string `bson:"condition" json:"condition"`
// System identifies which system or component this requirement affects
// This helps organize requirements by their target systems
System string bson:"system" json:"system"
System string `bson:"system" json:"system"`
// Requirement contains the actual requirement text
// This is the main content that describes what must be implemented
Requirement string bson:"requirement" json:"requirement"
Requirement string `bson:"requirement" json:"requirement"`
// Status tracks the current state of this requirement
// Possible values include "Entwurf", "In Prüfung", "Genehmigt", "Abgelehnt"
Status string bson:"status" json:"status"
Status string `bson:"status" json:"status"`
// CreatedAt records when this requirement was first created
// Used for sorting and audit purposes
CreatedAt time.Time bson:"created_at" json:"createdAt"
}
\ No newline at end of file
CreatedAt time.Time `bson:"created_at" json:"createdAt"`
}
......@@ -7,6 +7,7 @@ import (
"net/http"
"time"
"github.com/org-harmony/harmony/src/app/project"
"github.com/org-harmony/harmony/src/app/user"
"github.com/org-harmony/harmony/src/core/hctx"
"github.com/org-harmony/harmony/src/core/validation"
......@@ -238,10 +239,10 @@ func projectDetailController(appCtx *hctx.AppCtx, webCtx *web.Ctx, service *proj
// Render the project detail page with multiple template files
err = io.Render(
data,
"project.detail.page", // Main template name
"templates/project/detail-page.go.html", // Page wrapper template
"templates/project/_detail.go.html", // Project detail content
"templates/project/_requirements-list.go.html", // Requirements list partial
"project.detail.page", // Main template name
"project/detail-page.go.html", // Page wrapper template
"project/_detail.go.html", // Project detail content
"project/_requirements-list.go.html", // Requirements list partial
)
if err != nil {
......
......@@ -6,6 +6,8 @@ import (
"github.com/jackc/pgx/v5/pgxpool"
"github.com/org-harmony/harmony/src/app/eiffel"
homeWeb "github.com/org-harmony/harmony/src/app/home"
"github.com/org-harmony/harmony/src/app/project"
projectWeb "github.com/org-harmony/harmony/src/app/project/web"
"github.com/org-harmony/harmony/src/app/template"
templateWeb "github.com/org-harmony/harmony/src/app/template/web"
"github.com/org-harmony/harmony/src/app/user"
......@@ -44,6 +46,13 @@ func main() {
log.Fatalf("Error initializing MongoDB: %v", err)
}
// NEU: MongoDB Manager für Project-Modul initialisieren
mongoManager, err := project.NewMongoManager("mongodb://localhost:27017", "harmony")
if err != nil {
log.Fatalf("Error initializing MongoDB Manager: %v", err)
}
defer mongoManager.Close()
provider, db := initDB(validator)
defer db.Close()
......@@ -55,6 +64,7 @@ func main() {
userWeb.RegisterController(appCtx, webCtx)
templateWeb.RegisterController(appCtx, webCtx)
eiffel.RegisterController(appCtx, webCtx)
projectWeb.RegisterController(appCtx, webCtx, mongoManager)
util.Ok(web.Serve(r, webCtx.Config.Server))
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment