Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MB-9609] Migrate Backend Guides pages #27

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
6c4f013
Remove redundant redirects;
rogeruiz Oct 23, 2021
9eada8c
Add order front matter to Frontend pages
gidjin Oct 23, 2021
a9c6d1c
Merge pull request #34 from transcom/gidjin/MB-9609_ensure_order_of_f…
rogeruiz Oct 25, 2021
adaa8a4
Move API-Errors to new section
gidjin Oct 23, 2021
d33056d
Move API-Programming-Guide
gidjin Oct 23, 2021
5ef2f58
Move API-Style-Guide
gidjin Oct 23, 2021
cb68bde
Move Guide-to-Creating-an-Endpoint
gidjin Oct 23, 2021
e881f58
Move How-to-deprecate-endpoints
gidjin Oct 23, 2021
112ea79
Move Acceptance-Testing-Prime-API-Endpoints
gidjin Oct 23, 2021
0ae8db0
Move End-to-End-Testing-Playing-the-Prime
gidjin Oct 23, 2021
9fd4ae4
Move How-to-Test-the-Prime-API
gidjin Oct 23, 2021
87ac98e
Move Push-Notifications-to-Prime
gidjin Oct 25, 2021
c79195e
Add link to prime-api-deliverable repo
gidjin Oct 25, 2021
e59a154
Move APIs under new API top level category
gidjin Oct 25, 2021
235067b
Fix typo in redirect for acceptance-testing-prime-api-endpoints
gidjin Oct 25, 2021
264f891
Rename APIs to Swagger Documentation
gidjin Oct 25, 2021
10fbeae
Merge pull request #33 from transcom/rogeruiz/remove-redundant-redirects
rogeruiz Oct 25, 2021
2eb8a08
Merge remote-tracking branch 'origin/main' into gidjin/MB-9609_migrat…
gidjin Oct 25, 2021
9724d26
Merge pull request #35 from transcom/gidjin/MB-9609_migrate_api_section
rogeruiz Oct 26, 2021
774d2be
Add top level tools category
gidjin Oct 25, 2021
b3b03aa
Move Dependabot section
gidjin Oct 25, 2021
f82a7c6
Move dockerfile-use,-purpose,-and-documentation page
gidjin Oct 25, 2021
2bdc553
Move items to docusaurus section
gidjin Oct 25, 2021
f43afc5
Move generate-mocks-with-mockery
gidjin Oct 25, 2021
bb0568f
Move Setting up postman
gidjin Oct 25, 2021
6e93f8e
Move rest of postman docs
gidjin Oct 25, 2021
ec7e495
Move SchemaSpy docs
gidjin Oct 25, 2021
e8eb3ed
Move telemetry docs
gidjin Oct 25, 2021
b64bd26
Merge pull request #36 from transcom/gidjin/MB-9609_migrate_tools_sec…
rogeruiz Oct 26, 2021
fde37dd
Update telemetry docs (#29)
ronaktruss Oct 27, 2021
f728319
Update links to no longer use relative urls and add admonitions (#37)
ronaktruss Oct 28, 2021
28ac6ab
Add index and category files for Backend section
rogeruiz Oct 20, 2021
71713c4
Add categories for new Backend subsections
rogeruiz Oct 20, 2021
cc436cb
Move and tweak doc
rogeruiz Oct 20, 2021
dff6248
Move Acceptance Testing Notifications docs
rogeruiz Oct 20, 2021
ecd27db
Move Acceptance Testing Payment Requests
rogeruiz Oct 20, 2021
80c4f38
Move How To Write Fast Tests
rogeruiz Oct 20, 2021
621e0ac
Move Interacting With The DB In Go Server Tests
rogeruiz Oct 20, 2021
043b0d4
Move run acceptance tests
rogeruiz Oct 20, 2021
ec66c5b
Move Run E2E Tests
rogeruiz Oct 20, 2021
b69d061
Move Run Go Tests
rogeruiz Oct 20, 2021
260712d
Move Running Server Tests Inside A Transaction
rogeruiz Oct 20, 2021
2d88a5c
Move Test Data Generation
rogeruiz Oct 20, 2021
0a7fa6b
Move Testing Best Practices
rogeruiz Oct 20, 2021
9d20d4b
Move Testing Payment Requests For Domestic SIT SI
rogeruiz Oct 20, 2021
1619e94
Move Understanding Testdatagen Functions
rogeruiz Oct 20, 2021
d1a8dd3
Update title case for first ID
rogeruiz Oct 20, 2021
e62b571
Collapse all sidebar items by default
rogeruiz Oct 20, 2021
a325b94
Add new Backend section to navigation and sidebar
rogeruiz Oct 20, 2021
efe6b8a
Remove deprecated docs
rogeruiz Oct 20, 2021
ecd76db
Move Backend structure
rogeruiz Oct 21, 2021
ebe5487
Migrate Database
rogeruiz Oct 21, 2021
e05589b
Migrate 7 pages to backend/guides
rogeruiz Oct 21, 2021
86a5457
Migrate Guide to static analysis security workflow
rogeruiz Oct 21, 2021
90c41d7
Migrate Guide to creating an endpoint
rogeruiz Oct 21, 2021
71297ed
Migrate 7 pages
rogeruiz Oct 21, 2021
47596da
Migrate Session management
rogeruiz Oct 23, 2021
32cb025
Migrate Troubleshoot precommit hook failures
rogeruiz Oct 23, 2021
b4121b6
Migrate 7 pages
rogeruiz Oct 23, 2021
472aa86
Add new Backend section to navigation and sidebar
rogeruiz Oct 20, 2021
9aee803
Migrate Guide to creating an endpoint
rogeruiz Oct 21, 2021
0e457d8
Move Convigure Postico or TablePlus to connect to mymove DB page
gidjin Oct 22, 2021
6928036
Move Using EagerPreload in Pop page
gidjin Oct 22, 2021
d8bd078
Move Run pre-commit hooks page
gidjin Oct 22, 2021
02b5b63
Move Backup and Restore page
gidjin Oct 22, 2021
07fba18
Move datbase migrations page
gidjin Oct 22, 2021
bb5b74c
Move Common Errors and Solutions page
gidjin Oct 22, 2021
dc10e08
Set any help page to an index page;
rogeruiz Oct 23, 2021
905835f
Remove redundant Backend from navigation
rogeruiz Oct 23, 2021
00d961d
Migrate over docs and renumber existing migrations
rogeruiz Oct 26, 2021
8e6f0a0
Add note about using fmt.Errorf over errors.New
gidjin Oct 29, 2021
74315f2
Migrate pages to subpages GHC
rogeruiz Oct 30, 2021
de6b588
Fix Sidebar for Backend
rogeruiz Oct 30, 2021
0be086e
Move all redirects to their own files
rogeruiz Oct 30, 2021
1a770bb
Add in working Backend redirects
rogeruiz Oct 30, 2021
3c71433
Migrate Golang loops
rogeruiz Nov 2, 2021
5adb2cc
Migrate Golang time
rogeruiz Nov 2, 2021
b97a59b
Migrate TSPP data creation
rogeruiz Nov 2, 2021
a777ac8
Migrate Use optimistic locking
rogeruiz Nov 2, 2021
a7d9cd6
Migrate WIP server-side validation
rogeruiz Nov 2, 2021
1ff0ad1
Migrate Zip code to Rate area mappings
rogeruiz Nov 2, 2021
3e8007e
Update GHC sub-section
rogeruiz Nov 2, 2021
99ef90f
Migrate "How-to guides" to their own sub-section
rogeruiz Nov 2, 2021
322df12
Renumber pages
rogeruiz Nov 2, 2021
d3e91d6
Add in Backend redirects
rogeruiz Nov 2, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
---
sidebar_position: 2
---

# Push Notifications to Prime

The push mechanism is a way to notify the Prime of changes as they happen.

We will be using Web Hooks to implement the push mechanism.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
## API Errors
---
sidebar_position: 2
---

# API Errors

Well formatted errors are an important component of education to the user of the API and should be given as much care as the API design.

Expand All @@ -10,7 +14,7 @@ The JSON error body should provide a few things for the developer - a useful err

The instance identifier enables the Milmove team to [look up Cloudwatch logs](How-to-Search-AWS-Cloudwatch-Logs-using-Instance-ID.md) that were written when the problem occurred.

### Default Error
## Default Error
The default JSON output representation for the error messages looks like:

{
Expand All @@ -20,7 +24,7 @@ The default JSON output representation for the error messages looks like:
}


### Custom Error
## Custom Error
In addition to this default format, specific errors can choose to provide a custom representation that builds on this. A swagger example of how to define these errors is provided in this article on [backend errors](handle-backend-errors.md#defining-error-models-in-swagger).

Validation errors for PUT, PATCH and POST requests need a field breakdown, and will return an `UnprocessableEntity` response. The top level detail can summarize or generalize the validation failures and provide the detailed errors in an additional `invalidFields` object, like so:
Expand All @@ -36,7 +40,7 @@ Validation errors for PUT, PATCH and POST requests need a field breakdown, and w
}
}

### HTTP status codes
## HTTP status codes

HTTP defines a bunch of [meaningful status codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) that can be returned from an API. Milmove will leverage these to help the API consumers route their responses accordingly.

Expand Down Expand Up @@ -76,7 +80,7 @@ An **error response** is a swagger generated type that we use to send errors bac
mtoshipmentops.NewCreateMTOShipmentNotFound().WithPayload(payload)
```

### Error types and Error responses
## Error types and Error responses

Error types in the code are defined in `pkg/apperror/errors.go`.

Expand Down Expand Up @@ -109,7 +113,7 @@ Here are the main error types and the responses we send in that case:

Note: There might be new errors that we generate as the code evolves, but it's a good idea to understand these definitions and see if your error fits one of them before defining a new one. This improves consistency and makes the errors easier to understand and process by the user. If you do define a new error, please update this guide.

### Security Guidelines
## Security Guidelines

In the next section we will cover converting the errors into responses. For each of the error responses, do not provide any information in the error message to help *debug* the issue. The target audience for the error responses is **the client, not the developer**. So we can let them know what they did wrong, but not reveal information about our own systems.

Expand All @@ -123,7 +127,7 @@ Secure logging of errors into Cloudwatch is what we use for developer informatio

**Filepaths:** Equally there is no reason to reveal a file path to the client. Never provide this information in the error message.

### Constructing Errors and Responses
## Constructing Errors and Responses

To create an instance of an error type, you'll call the `New` function for that error, and pass in parameters pertaining to that error.

Expand Down
22 changes: 22 additions & 0 deletions docs/api/guides/api-programming-guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
sidebar_position: 1
---

# API Programming Guide

This page will collect guides and information on programming our external facing APIs such as Prime API, Support API and Orders API.

- [API Style Guide](api-style-guide)
- [API Errors](api-errors)
- [Guide to Creating an Endpoint](guide-to-creating-an-endpoint)
- [How to Deprecate an API Endpoint](how-to-deprecate-endpoints)
- [Acceptance Testing Prime API Endpoints](../testing/acceptance-testing-prime-api-endpoints)
- [Push Notifications to Prime](../docs/push-notifications-to-prime)
- [[Acceptance Testing Notifications]]
- [[How to Add an Event Trigger]]

## Using Postman

- [Setting Up Postman](../../tools/postman/setting-up-postman)
- [setup postman to make mutual tls api calls](../../tools/postman/setup-postman-to-make-mutual-tls-api-calls)
- [Using Etags and the If Match Header in Postman](../../tools/postman/using-etags-and-the-if-match-header-in-postman)
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
---
sidebar_position: 3
---

# API Style Guide

We really need a comprehensive style guide, but in the meanwhile this page will collect useful bits of style related info.

### Paths
## Paths

* Use kebab-case for all paths. This is a common convention.

Expand All @@ -13,9 +19,9 @@ We really need a comprehensive style guide, but in the meanwhile this page will
'/mto-shipments/{mtoShipmentID}/addresses/{addressID}':


### Parameters
## Parameters

#### **Case**
### **Case**

Consistency is important and using mixed cases is confusing. We selected camelCase because it's predominant in the code base and required the least amount of effort to implement. [[Decision Record]](https://github.com/transcom/mymove/blob/master/docs/adr/0044-params-styling.md)

Expand All @@ -32,7 +38,7 @@ Consistency is important and using mixed cases is confusing. We selected camelCa
type: string
```

#### **Special Parameters**
### **Special Parameters**
* All PUT and PATCH updates should have an eTag in the request. This is required to enforce optimistic locking. In the yaml, we mark these as `readOnly: true`.

* All endpoints should properly populate the `produces` and `consumes` properties in the yaml. This is most usually set to `application/json`.
Expand All @@ -43,7 +49,7 @@ Consistency is important and using mixed cases is confusing. We selected camelCa
produces:
- application/json
```
### Values
## Values

* Enum values should be ALL_CAPS with underscores.

Expand All @@ -53,11 +59,11 @@ Consistency is important and using mixed cases is confusing. We selected camelCa
- RECEIVING_AGENT
```

### Tags
## Tags

* Use camelCase for the tags. Typically use object names for tags to group all endpoints associated with the object like `paymentRequest`.

#### **Dates**
### **Dates**

* Use Swagger supported date formats, `date-time` or `date`, depending on whether we need to store an exact timestamp of the event. [[ADR]](https://github.com/transcom/mymove/blob/master/docs/adr/0051-swagger-date-formats.md)

Expand All @@ -79,15 +85,15 @@ Note that **in the database**, we use the following recommendations. [[Decision

* Note that `updatedAt` and `createdAt` should always be marked `readOnly: true`. This is because we do not use any values the caller passes in, but instead calculate them ourselves.

#### Convert dates to timestamps when comparing with timestamps
### Convert dates to timestamps when comparing with timestamps

1. Interpret a date in Pacific time to convert it to a naive timestamp

2. Use beginning-of-day (12:00:00 am) or end-of-day (11:59:59 pm) depending on operation being performed. In general, use the most forgiving interpretation:
* If you’re calculating if a date is more than 10 days in the future, use end-of-day.
* If you’re calculating if a date is more than 2 days ago, use beginning-of-day.

#### Serialization
### Serialization

Use [RFC3339](https://tools.ietf.org/html/rfc3339) unless you have a reason not to. It handles both dates and timestamps. `ISO8601` is roughly equivalent for the purposes of this document; however, it contains many optional features and it is recommended that projects move to `RFC3339` to avoid potential issues resulting from this complexity.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
---
sidebar_position: 4
---

# Creating an Endpoint
###### These are the various steps that are involved in creating a new endpoint.

Prior to creating an endpoint in the Handler folder, we must first add a new endpoint definition to swagger. We are using Swagger 2.0, which is [OpenAPI](https://swagger.io/specification/v2/), a specification we use to format our RESTful APIs and provide a template for us to communicate the information in our API.
Always start with swagger. This step creates your endpoint definition and generates the files and helper functions you will need to create your endpoint. More specifically, swagger converts JSON user input into generated Go types.
## Adding a new entry into the yaml
All new definitions will be added in `mymove/swagger-def`. Note that we have broken down our spec into different files and we share definitions between files.
Built compiled versions of our API spec will be generated and stored in the swagger folder, which we will not edit directly. Notice that there is a yaml file for each of our APIs.
An endpoint definition for the prime will go into the Prime yaml, but you may notice there are some definitions in `mymove/swagger-def/definitions`.
This is because some definitions are shared across APIs and we've created a space to add those definitions in one place.
All new definitions will be added in `mymove/swagger-def`. Note that we have broken down our spec into different files and we share definitions between files.
Built compiled versions of our API spec will be generated and stored in the swagger folder, which we will not edit directly. Notice that there is a yaml file for each of our APIs.
An endpoint definition for the prime will go into the Prime yaml, but you may notice there are some definitions in `mymove/swagger-def/definitions`.
This is because some definitions are shared across APIs and we've created a space to add those definitions in one place.
For example, `Uploads.yaml` shares its definition across various APIs, and rather than creating various yaml files for this action, we have created one and added it to the shared `definitions` folder.

For the purposes for adding a new endpoint, make sure that your endpoint is defined in these sections:
* `tags` - is where we group all of our endpoints by category (i.e. shipment endpoints, agent endpoints, service item endpoints, etc.).
* `tags` - is where we group all of our endpoints by category (i.e. shipment endpoints, agent endpoints, service item endpoints, etc.).
This top level field is where our gen files will divide the endpoints into their own packages. Tag component names are `camelCase`.
* `paths` - defines our endpoint. Path names use `kebab-case`.
* `definitions` - defines the shape of the data for our endpoint. Definitions component names are `PascalCase`.
Expand All @@ -21,7 +25,7 @@ For the purposes for adding a new endpoint, make sure that your endpoint is defi
#### Troubleshooting your local swagger state:
If you are having issues with your local swagger state it is recommended to run `make server_generate`, accept the prompt, and then run `make server_run` again. For more information on troubleshooting, [this](https://ustcdp3.slack.com/archives/CP6PTUPQF/p1632254277386600) explanation will be helpful.

#### Defining a path for your endpoint
#### Defining a path for your endpoint
For more information about URL design and structure checkout: [API Style Guide](https://transcom.github.io/mymove-docs/docs/dev/contributing/backend/API-Style-Guide)

Defining your endpoint path follows this simple convention:
Expand All @@ -36,7 +40,7 @@ Defining your endpoint path follows this simple convention:
parameters: include parameters associated with this path
responses: response codes for this path, and a schema reference and the description if needed.

NOTE: The description item will reference markdown files in `swagger-def/info/`. This change is further described in a recent [PR](https://github.com/transcom/mymove/pull/7435).
NOTE: The description item will reference markdown files in `swagger-def/info/`. This change is further described in a recent [PR](https://github.com/transcom/mymove/pull/7435).

An example of the `Moves` path is as follows:

Expand Down Expand Up @@ -67,7 +71,7 @@ An example of the `Moves` path is as follows:
$ref: 'responses/PermissionDenied.yaml'
'500':
$ref: '#/responses/ServerError'

#### Description Section and the response body
In your endpoint description make sure that the following fields are included when necessary:
* required - fields that are required are listed in the description section.
Expand All @@ -77,7 +81,7 @@ In your endpoint description make sure that the following fields are included wh
* eTag - An entity tag is provided so that a browser client or a script can make conditional REST requests using optimistic concurrency control. All eTags must be marked as readOnly.

An example of the ListMove description is as follows:

ListMove:
description:
$ref: 'info/{file_name}.md'
Expand Down Expand Up @@ -125,11 +129,11 @@ An example of the ListMove description is as follows:
For information on error responses, check out: [API Errors Guide](https://transcom.github.io/mymove-docs/docs/dev/contributing/backend/API-Errors#api-errors)

#### Gen files:
Once you finishing updating the yaml files with the new endpoint information make sure to run your make commands like `make swagger-generate` to autogenerate your swagger files, or simply run `make server_run`,
Once you finishing updating the yaml files with the new endpoint information make sure to run your make commands like `make swagger-generate` to autogenerate your swagger files, or simply run `make server_run`,
which runs your server and other useful make commands in one go.

## Creating a Handler:
Now you're ready to add your endpoint to the `handlers` folder. Start building out the service object before creating your handler.
Now you're ready to add your endpoint to the `handlers` folder. Start building out the service object before creating your handler.
For more information about service objects and when to create one: [Service Objects](https://transcom.github.io/mymove-docs/docs/dev/contributing/backend/service-objects).

An important note about service objects: The service layer is where we will store our business logic and connect to the database. Once a service object is created, it will be passed in to the handler `NewPrimeAPIHandler` function in `pkg/handlers/primeapi/api.go`,
Expand Down Expand Up @@ -275,3 +279,4 @@ var eventModels = map[KeyType]eventModel{


If you'd like to learn more about event triggers, you can find more details [here](https://github.com/transcom/mymove-docs/blob/720592c63db4bffe402a801417f7c14772573c28/docs/dev/contributing/backend/How-to-Add-an-Event-Trigger.md).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes I wonder if we should standardize on adding or not adding a newline at the end of the file.

Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
sidebar_position: 5
---

# How to Deprecate an API Endpoint
This article adheres to the principles of [API evolution](https://apisyouwonthate.com/blog/api-evolution-for-rest-http-apis), with a reduced focused on versioning. In essence, this means that we will strive to make _additive_ changes. We will introduce new functionality into the API and gradually communicate the deprecation and eventual sunsetting of the old functionality.

Expand Down Expand Up @@ -52,4 +56,4 @@ Feel free to ping me if you have any questions. Thanks all!

## Versioning

When we go live, we will have to address how we plan to _version_ our APIs, particularly for external clients. This process is still a work in progress, and [a difficult one at that](https://blog.container-solutions.com/api-versioning-what-is-it-why-so-hard). In the meantime, we will still follow the above steps for API changes that could impact our internal teams.
When we go live, we will have to address how we plan to _version_ our APIs, particularly for external clients. This process is still a work in progress, and [a difficult one at that](https://blog.container-solutions.com/api-versioning-what-is-it-why-so-hard). In the meantime, we will still follow the above steps for API changes that could impact our internal teams.
8 changes: 8 additions & 0 deletions docs/api/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
id: index
sidebar_position: 1
slug: /api
---
# MilMove API

Here's an overview for the MilMove API.
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
sidebar_position: 1
---

# Acceptance Testing Prime API

## Current Prime API Endpoints
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
---
sidebar_position: 2
---

# End to End Testing Playing the Prime

This page includes instructions on how to complete basic functions as the Prime when testing the application e2e (e.g. MilMob) with other user roles (Services Counselor, TOO, TIO).

### Setup
## Setup

* [Install mTLS integrations certificate](https://github.com/transcom/transcom-infrasec-com/blob/master/docs/mtls-certs.md) on your local machine

Expand All @@ -22,7 +28,7 @@ This page includes instructions on how to complete basic functions as the Prime
* If you don't get a 200, check out the [Postman troubleshooting doc](https://github.com/transcom/mymove/wiki/setup-postman-to-make-mutual-tls-api-calls#troubleshooting-postman).


### E2E Testing Sequence for 1 HHG Move
## E2E Testing Sequence for 1 HHG Move

* Customer creates move
* Services Counselor reviews
Expand All @@ -35,7 +41,7 @@ This page includes instructions on how to complete basic functions as the Prime
This page covers the bolded sections for Prime.


### Prime: Part I
## Prime: Part I
A move must go through all previous steps before these actions can be taken, ending with TOO approval.

Each request in the collection should be ran in sequence. You can edit the body as you see fit. There is code in the Tests section of some of the requests that will set variables to reuse, e.g. eTag, mtoShipmentID, etc.
Expand Down Expand Up @@ -68,7 +74,7 @@ Each request in the collection should be ran in sequence. You can edit the body

* Wait for TOO approval

### Prime: Part II
## Prime: Part II
Once the service items have been approved, you can create a payment request. The current setup includes two separate payment requests: One with DOSHUT service item, and one with DOFSIT service items.

* Send request `createPaymentRequest1`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
sidebar_position: 3
---

# How to Test the Prime API

> ❗ For the most up-to-date information about the Prime API, please visit https://github.com/transcom/prime_api_deliverable/wiki. The Prime API Deliverable wiki is the client-facing documentation and will be your best resource for understanding how to use this API. This article is a stub that has been kept to preserve some of the old information that might be useful for current MilMove developers.
Expand Down
4 changes: 4 additions & 0 deletions docs/backend/_category_.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"label": "MilMove Backend",
"position": 1
}
5 changes: 5 additions & 0 deletions docs/backend/guides/_category_.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"label": "Guides",
"position": 3,
"collapsed": true
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
sidebar_position: 9
---

# How to Access a Global Application Variable

## Overview
Expand Down
Loading