## Naming Conventions

### Schema

One of the principles of GraphQL is that the server should respond with data that is in the format
most useful to the client. As all consumers of our GraphQL implementation are written in JavaScript
and will be for the foreseeable future, the naming conventions utilized by the schema should adhere
to JavaScript general naming conventions.

### Type Names

Type names should be in upper camel case/Pascal case:

Good:
```
type StreamData
```

Bad:
```
type stream_data    # snake case
```
```
type streamData     # lower camel case
```

### Field Names

Field names should be in lower camel case:

Good:
```
type Product {
    productName: String
```

Bad:
```
type Product {
    product_name: String
```

Field names for `name` and `id` fields should be prefixed with the lower snake case type name.
While this is somewhat repetitive and verbose, many of the components written on the front end use
this convention for variable names, so clients this is an easier format.

Good:
```
type Artist {
    artistName: String
    artistId: String
    artistInfoId: String
}
```

Bad:
```
type Artist {
    name: String
    id: String
    infoId: String
}
```

### Enum Values

Enum values should be uppercase snake case, as these are constant values, and JavaScript constants
typically use this format.

Good:
```
enum ProductConfiguration {
    DIGITAL_AUDIO
    PHYSICAL_AUDIO
}
```

Bad:
```
enum ProductConfiguration {
    DigitalAudio        # upper camel case
    PhysicalAudio
}
```
```
enum ProductConfiguration {
    digitalAudio        # lower camel case
    physicalAudio
}
```
```
enum ProductConfiguration {
    digital_audio       # lower snake case
    physical_audio
}
```

