diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..47aa876 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +backend/target/ +frontend/node_modules/ +frontend/dist/ diff --git a/backend/target/classes/application.properties b/backend/target/classes/application.properties deleted file mode 100644 index 4aa97fa..0000000 --- a/backend/target/classes/application.properties +++ /dev/null @@ -1,37 +0,0 @@ -spring.application.name=hiveops-guide - -server.port=8099 - -spring.datasource.url=${DB_URL:jdbc:postgresql://localhost:5432/hiveiq_guide} -spring.datasource.username=${DB_USERNAME:hiveiq} -spring.datasource.password=${DB_PASSWORD} -spring.datasource.driver-class-name=org.postgresql.Driver - -spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect -spring.jpa.hibernate.ddl-auto=validate - -spring.flyway.enabled=true -spring.flyway.locations=classpath:db/migration -spring.flyway.baseline-on-migrate=true -spring.flyway.baseline-version=1 -spring.flyway.validate-on-migrate=true -spring.jpa.show-sql=false - -logging.level.root=WARN -logging.level.com.hiveops.guide=INFO -logging.level.org.springframework.security=DEBUG - -server.error.include-message=never - -management.endpoints.web.exposure.include=health,info -management.endpoint.health.show-details=never - -spring.jackson.default-property-inclusion=non_null -spring.jackson.serialization.write-dates-as-timestamps=false -spring.jackson.time-zone=UTC - -jwt.secret=${JWT_SECRET} - -internal.secret=${INTERNAL_SECRET:dev-internal-secret} - -cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:5188} diff --git a/backend/target/classes/com/hiveops/guide/GuideApplication.class b/backend/target/classes/com/hiveops/guide/GuideApplication.class deleted file mode 100644 index 94a6888..0000000 Binary files a/backend/target/classes/com/hiveops/guide/GuideApplication.class and /dev/null differ diff --git a/backend/target/classes/com/hiveops/guide/config/SecurityConfig.class b/backend/target/classes/com/hiveops/guide/config/SecurityConfig.class deleted file mode 100644 index 2162126..0000000 Binary files a/backend/target/classes/com/hiveops/guide/config/SecurityConfig.class and /dev/null differ diff --git a/backend/target/classes/com/hiveops/guide/controller/GuideController.class b/backend/target/classes/com/hiveops/guide/controller/GuideController.class deleted file mode 100644 index deabe37..0000000 Binary files a/backend/target/classes/com/hiveops/guide/controller/GuideController.class and /dev/null differ diff --git a/backend/target/classes/com/hiveops/guide/entity/Guide$GuideBuilder.class b/backend/target/classes/com/hiveops/guide/entity/Guide$GuideBuilder.class deleted file mode 100644 index cd48381..0000000 Binary files a/backend/target/classes/com/hiveops/guide/entity/Guide$GuideBuilder.class and /dev/null differ diff --git a/backend/target/classes/com/hiveops/guide/entity/Guide.class b/backend/target/classes/com/hiveops/guide/entity/Guide.class deleted file mode 100644 index b7432b4..0000000 Binary files a/backend/target/classes/com/hiveops/guide/entity/Guide.class and /dev/null differ diff --git a/backend/target/classes/com/hiveops/guide/exception/GlobalExceptionHandler.class b/backend/target/classes/com/hiveops/guide/exception/GlobalExceptionHandler.class deleted file mode 100644 index ea35504..0000000 Binary files a/backend/target/classes/com/hiveops/guide/exception/GlobalExceptionHandler.class and /dev/null differ diff --git a/backend/target/classes/com/hiveops/guide/repository/GuideRepository.class b/backend/target/classes/com/hiveops/guide/repository/GuideRepository.class deleted file mode 100644 index 99c376d..0000000 Binary files a/backend/target/classes/com/hiveops/guide/repository/GuideRepository.class and /dev/null differ diff --git a/backend/target/classes/com/hiveops/guide/security/JwtAuthenticationFilter.class b/backend/target/classes/com/hiveops/guide/security/JwtAuthenticationFilter.class deleted file mode 100644 index 8c4fc47..0000000 Binary files a/backend/target/classes/com/hiveops/guide/security/JwtAuthenticationFilter.class and /dev/null differ diff --git a/backend/target/classes/com/hiveops/guide/service/GuideService.class b/backend/target/classes/com/hiveops/guide/service/GuideService.class deleted file mode 100644 index 3ec2405..0000000 Binary files a/backend/target/classes/com/hiveops/guide/service/GuideService.class and /dev/null differ diff --git a/backend/target/classes/db/migration/V1__create_guides_table.sql b/backend/target/classes/db/migration/V1__create_guides_table.sql deleted file mode 100644 index 291633b..0000000 --- a/backend/target/classes/db/migration/V1__create_guides_table.sql +++ /dev/null @@ -1,11 +0,0 @@ -CREATE TABLE guides ( - id BIGSERIAL PRIMARY KEY, - page_key VARCHAR(100) NOT NULL UNIQUE, - content_json TEXT NOT NULL, - enabled BOOLEAN NOT NULL DEFAULT TRUE, - updated_by VARCHAR(255), - created_at TIMESTAMPTZ NOT NULL DEFAULT now(), - updated_at TIMESTAMPTZ -); - -CREATE INDEX idx_guides_page_key ON guides (page_key); diff --git a/backend/target/classes/db/migration/V2__seed_guides.sql b/backend/target/classes/db/migration/V2__seed_guides.sql deleted file mode 100644 index 3df8b65..0000000 --- a/backend/target/classes/db/migration/V2__seed_guides.sql +++ /dev/null @@ -1,321 +0,0 @@ -INSERT INTO guides (page_key, content_json) VALUES - -('fleet.tasks', $${ - "title": "Fleet Task Workflow", - "subtitle": "How to deploy hotfixes and software to ATMs", - "sections": [ - { - "icon": "📤", - "heading": "Upload Hotfix to CDN", - "steps": [ - { "text": "Go to cdn.bcos.cloud/uploads.html and log in with your credentials." }, - { "text": "Obtain your upload code from the portal." }, - { "text": "Upload your hotfix .zip file using the upload code.", "note": "This CDN upload step applies to HOTFIX artifacts only." } - ] - }, - { - "icon": "📦", - "heading": "Import into Fleet Artifacts", - "steps": [ - { "text": "Go to the Artifacts tab in Fleet Tasks." }, - { "text": "Click Import Hotfix from CDN — available hotfixes on the CDN will be listed." }, - { "text": "Click Import next to the hotfix you uploaded." }, - { "text": "Once imported, click Enable on the artifact.", "note": "An artifact must be enabled before it can be used in a task." } - ] - }, - { - "icon": "🚀", - "heading": "Create a Deployment Task", - "steps": [ - { "text": "Click Create Task in the toolbar." }, - { "text": "Select task kind: HOTFIX to download and apply immediately, or HOTFIX_INSTALL to schedule within a patch window." }, - { "text": "Choose the imported artifact and select one or more target ATMs." }, - { "text": "Submit — the task is created with status Pending Approval and will not execute until approved." } - ] - }, - { - "icon": "✅", - "heading": "Approval", - "steps": [ - { "text": "A user with fleet approver permission opens the Approvals tab." }, - { "text": "They can add an optional note, then click Approve or Reject." }, - { "text": "Approved tasks move to Queued and ATMs pick them up on the next check-in.", "note": "Rejected tasks are cancelled. The requester should be notified separately." } - ] - }, - { - "icon": "🕐", - "heading": "Patch Windows (HOTFIX_INSTALL)", - "steps": [ - { "text": "Assign a Patch Window to ATMs via device settings to control when installs run." }, - { "text": "When a HOTFIX_INSTALL task is created, it auto-schedules within that window — the Scheduled tab shows the queued time." }, - { "text": "The task still requires approval before it will execute." }, - { "text": "If an ATM has no patch window assigned, the install runs immediately after approval.", "note": "Patch windows are defined in the Patch Windows tab." } - ] - } - ] -}$$), - -('fleet.artifacts', $${ - "title": "Artifact Import Guide", - "subtitle": "Fleet Management", - "sections": [ - { - "icon": "🤖", - "heading": "Import Agent", - "steps": [ - { "text": "Fetches the latest HiveOps Agent release from the CDN manifest." }, - { "text": "Pulls all available packages — patch JARs and standard full installers — for each platform (Windows, Linux)." }, - { "text": "Import the patch package to create an UPDATE_AGENT fleet task that pushes agent upgrades to devices.", "note": "Use patch packages (small, agent core only) for regular upgrades." } - ] - }, - { - "icon": "🔧", - "heading": "Import Hotfix", - "steps": [ - { "text": "Fetches hotfix packages from the CDN manifest at cdn.bcos.cloud." }, - { "text": "Hotfix artifacts are deployed to devices via a UPDATE_HOTFIX fleet task without requiring an agent update.", "note": "Use for urgent patches, customer-specific fixes, or OS-level updates." } - ] - }, - { - "icon": "📦", - "heading": "Import Software", - "steps": [ - { "text": "Fetches third-party software packages from the CDN software manifest." }, - { "text": "Deploy via UPDATE_SOFTWARE fleet tasks to install or update third-party applications.", "note": "New packages are uploaded via the Browser CDN tool." } - ] - } - ] -}$$), - -('fleet.patch-windows', $${ - "title": "Patch Window Guide", - "subtitle": "How to schedule and manage ATM maintenance windows", - "sections": [ - { - "icon": "🕐", - "heading": "What is a Patch Window?", - "steps": [ - { "text": "A Patch Window defines a recurring time slot when ATMs are allowed to install hotfixes." }, - { "text": "ATMs assigned to a window will only run HOTFIX_INSTALL tasks during that window — never outside of it.", "note": "HOTFIX tasks (immediate download) are not affected by patch windows — only HOTFIX_INSTALL." }, - { "text": "Windows can recur every week on selected days, or on a specific week of the month (e.g. 2nd Tuesday)." } - ] - }, - { - "icon": "➕", - "heading": "Create a Patch Window", - "steps": [ - { "text": "Click + New Patch Window in the toolbar." }, - { "text": "Enter a name and select the institution this window belongs to." }, - { "text": "Select one or more days of the week when the window is active." }, - { "text": "Optionally set a Week of Month to make it monthly (e.g. 1st week only). Leave blank for weekly recurrence." }, - { "text": "Set the start and end time and select the correct timezone.", "note": "The window runs from start time to end time — keep it outside business hours." } - ] - }, - { - "icon": "🏧", - "heading": "Assign ATMs to a Window", - "steps": [ - { "text": "Click any window row in the table to open the ATM assignment panel." }, - { "text": "ATMs currently assigned to that window are listed with their location." }, - { "text": "To assign an ATM, edit the ATM record in Device Management and set its Patch Window." }, - { "text": "To remove an ATM, click Unassign next to it in the panel.", "note": "An ATM can only belong to one patch window at a time." } - ] - }, - { - "icon": "🚀", - "heading": "Using with HOTFIX_INSTALL Tasks", - "steps": [ - { "text": "When a HOTFIX_INSTALL task is created for an ATM with a patch window, it is automatically scheduled for the next available window slot." }, - { "text": "The scheduled time appears in the Scheduled tab in Fleet Tasks." }, - { "text": "The task still requires approval before it will execute — approval can happen before the window opens." }, - { "text": "If the ATM has no patch window assigned, the install runs immediately after approval.", "note": "Always assign a patch window to ATMs in live production environments." } - ] - } - ] -}$$), - -('devices.list', $${ - "title": "Device List", - "subtitle": "How to find, filter, and manage your devices", - "sections": [ - { - "icon": "🔍", - "heading": "Finding Devices", - "steps": [ - { "text": "Use the Search box to find by ATM ID or location name." }, - { "text": "Filter by Status, Model, Group, or Agent Version in the left sidebar." }, - { "text": "Active filters appear as tags above the table — click × to remove any." } - ] - }, - { - "icon": "🟢", - "heading": "Understanding Status Indicators", - "steps": [ - { "text": "IN SERVICE (green) — device is operational." }, - { "text": "DOWN (red) — device has an active fault." }, - { "text": "MAINTENANCE (orange) — device is under scheduled service." }, - { "text": "AGENT_OFFLINE (grey dot) — agent has not checked in for more than 5 minutes." }, - { "text": "The agent version and CDN speed bars show the software state of each device." } - ] - }, - { - "icon": "👆", - "heading": "Viewing a Device", - "steps": [ - { "text": "Click any row to open the quick-view sidebar on the right." }, - { "text": "The sidebar has three tabs: Properties, Modules, and Command Center." }, - { "text": "Click the device ID link to open the full Device Detail page." } - ] - }, - { - "icon": "➕", - "heading": "Adding a Device", - "steps": [ - { "text": "Click + Add Device in the toolbar." }, - { "text": "Enter the ATM ID, Location, and Model (required)." }, - { "text": "Use Lookup Coords to geocode the address automatically." }, - { "text": "Assign to an Institution if the device belongs to a specific customer." } - ] - } - ] -}$$), - -('devices.detail', $${ - "title": "Device Detail", - "subtitle": "How to view and manage an individual device", - "sections": [ - { - "icon": "📋", - "heading": "Navigating Tabs", - "steps": [ - { "text": "Use the tab bar to switch between all device views." }, - { "text": "Details — core properties and location." }, - { "text": "Software — full software inventory by category (ATM, OS, Security, Patches)." }, - { "text": "Hardware — component inventory; a badge appears when unacknowledged changes exist." }, - { "text": "Cassettes — current cassette config; apply a template from here." }, - { "text": "Activity — 24/48/72-hour timeline of power, state, and network events." } - ] - }, - { - "icon": "✏️", - "heading": "Editing Properties", - "steps": [ - { "text": "In the Details tab, click Edit." }, - { "text": "Update location, address, coordinates, or custom fields." }, - { "text": "Changing the address triggers auto-geocoding — review coordinates before saving." }, - { "text": "Click Save to confirm, or Cancel to discard." }, - { "text": "Use Rename to change the ATM ID itself (updates the agent registration)." } - ] - }, - { - "icon": "🔀", - "heading": "Moving & Reassigning", - "steps": [ - { "text": "Click Move Institution to reassign the device to a different customer." }, - { "text": "Select the destination institution from the dropdown and confirm." }, - { "text": "The device will immediately appear under the new institution for all users." } - ] - }, - { - "icon": "⚠️", - "heading": "Resetting Device State", - "steps": [ - { "text": "If a device is stuck in IN SUPERVISOR or an incorrect state, click Reset to In Service." }, - { "text": "This clears the supervisor flag and returns the device to normal operation." }, - { "text": "Only use this after confirming the physical ATM is no longer in supervisor mode." } - ] - } - ] -}$$), - -('incidents.list', $${ - "title": "Incident Management", - "subtitle": "How to track, assign, and resolve ATM incidents", - "sections": [ - { - "icon": "🔍", - "heading": "Finding Incidents", - "steps": [ - { "text": "Use the search bar to find by Incident #, ATM name/ID, or description text." }, - { "text": "Filter by Status, Severity, Type, Technician, or ATM Group in the left sidebar." }, - { "text": "Save a filter combination as a Preset for quick reuse." }, - { "text": "Switch between the Active and Parked tabs to see parked incidents." } - ] - }, - { - "icon": "🔄", - "heading": "Incident Lifecycle", - "steps": [ - { "text": "New incidents start as OPEN — assign to a technician to begin." }, - { "text": "ASSIGNED → click Start when work begins → IN PROGRESS." }, - { "text": "Once resolved, click ResolveRESOLVED." }, - { "text": "Final review, then CloseCLOSED." }, - { "text": "Park an incident at any stage to temporarily hold it without closing." } - ] - }, - { - "icon": "👤", - "heading": "Assigning & Reassigning", - "steps": [ - { "text": "Click an incident row to open the detail sidebar." }, - { "text": "Set a Helpdesk Person (remote support) and a Field Technician (on-site)." }, - { "text": "Either assignment is optional — you can advance the workflow with just one or neither." }, - { "text": "Reassign at any stage by clicking the assignment field in the sidebar." } - ] - }, - { - "icon": "⚠️", - "heading": "Special Cases", - "steps": [ - { "text": "Possible Fraud type — requires investigation notes before the incident can be closed." }, - { "text": "Linked incidents — group related tickets from the same ATM using the Link action." }, - { "text": "Recurring incidents — if the same issue reopens within 30 minutes, the recurrence counter increments automatically." }, - { "text": "Bulk close — select multiple resolved incidents and close them in one action." } - ] - } - ] -}$$), - -('incidents.create', $${ - "title": "Reporting an Incident", - "subtitle": "How to manually log a new ATM incident", - "sections": [ - { - "icon": "🏧", - "heading": "Selecting the ATM", - "steps": [ - { "text": "Use the ATM dropdown to search by ATM ID or location name." }, - { "text": "Only ATMs your institution owns will appear." } - ] - }, - { - "icon": "📋", - "heading": "Choosing the Right Type", - "steps": [ - { "text": "Select the incident type that best describes the fault." }, - { "text": "If unsure, use General Fault — type can be reclassified later from the Incident List." }, - { "text": "Possible Fraud triggers an investigation workflow — only select if fraud is suspected." } - ] - }, - { - "icon": "🎯", - "heading": "Setting Severity", - "steps": [ - { "text": "Low — minor impact, ATM still functional." }, - { "text": "Medium — degraded operation (e.g. one cassette low)." }, - { "text": "High — ATM partially out of service." }, - { "text": "Critical — ATM fully down or security incident." } - ] - }, - { - "icon": "📝", - "heading": "Writing a Good Description", - "steps": [ - { "text": "Include what the customer or technician observed." }, - { "text": "Note any error codes shown on the ATM screen." }, - { "text": "Include the time the fault was first noticed." }, - { "text": "A clear description speeds up technician dispatch and resolution." } - ] - } - ] -}$$); diff --git a/backend/target/hiveops-guide-1.0.0.jar b/backend/target/hiveops-guide-1.0.0.jar deleted file mode 100644 index 8828dd5..0000000 Binary files a/backend/target/hiveops-guide-1.0.0.jar and /dev/null differ diff --git a/backend/target/hiveops-guide-1.0.0.jar.original b/backend/target/hiveops-guide-1.0.0.jar.original deleted file mode 100644 index ab88258..0000000 Binary files a/backend/target/hiveops-guide-1.0.0.jar.original and /dev/null differ diff --git a/backend/target/maven-archiver/pom.properties b/backend/target/maven-archiver/pom.properties deleted file mode 100644 index fb526a5..0000000 --- a/backend/target/maven-archiver/pom.properties +++ /dev/null @@ -1,3 +0,0 @@ -artifactId=hiveops-guide -groupId=com.hiveops -version=1.0.0 diff --git a/backend/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/backend/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst deleted file mode 100644 index 7c9e1c0..0000000 --- a/backend/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ /dev/null @@ -1,9 +0,0 @@ -com/hiveops/guide/entity/Guide.class -com/hiveops/guide/config/SecurityConfig.class -com/hiveops/guide/entity/Guide$GuideBuilder.class -com/hiveops/guide/repository/GuideRepository.class -com/hiveops/guide/security/JwtAuthenticationFilter.class -com/hiveops/guide/exception/GlobalExceptionHandler.class -com/hiveops/guide/GuideApplication.class -com/hiveops/guide/service/GuideService.class -com/hiveops/guide/controller/GuideController.class diff --git a/backend/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/backend/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted file mode 100644 index 2605a80..0000000 --- a/backend/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ /dev/null @@ -1,8 +0,0 @@ -/source/hiveops-src/hiveops-guide/backend/src/main/java/com/hiveops/guide/GuideApplication.java -/source/hiveops-src/hiveops-guide/backend/src/main/java/com/hiveops/guide/config/SecurityConfig.java -/source/hiveops-src/hiveops-guide/backend/src/main/java/com/hiveops/guide/controller/GuideController.java -/source/hiveops-src/hiveops-guide/backend/src/main/java/com/hiveops/guide/entity/Guide.java -/source/hiveops-src/hiveops-guide/backend/src/main/java/com/hiveops/guide/exception/GlobalExceptionHandler.java -/source/hiveops-src/hiveops-guide/backend/src/main/java/com/hiveops/guide/repository/GuideRepository.java -/source/hiveops-src/hiveops-guide/backend/src/main/java/com/hiveops/guide/security/JwtAuthenticationFilter.java -/source/hiveops-src/hiveops-guide/backend/src/main/java/com/hiveops/guide/service/GuideService.java