# community.cheese.log

> A personal log entry about one or more cheeses

- Kind: record
- Record key: tid
- Authority: cheese.community
- Lexicon: 1
- Published by [cheese.community](https://lexicon.garden/identity/did:plc:f3tw75yxxq7uocckmtwhc6x5), the NSID's authority

## Links

- [Documentation](https://lexicon.garden/lexicon/did:plc:f3tw75yxxq7uocckmtwhc6x5/community.cheese.log)
- [Schema JSON](https://lexicon.garden/lexicon/did:plc:f3tw75yxxq7uocckmtwhc6x5/community.cheese.log/schema.json)
- [Analytics](https://lexicon.garden/lexicon/did:plc:f3tw75yxxq7uocckmtwhc6x5/community.cheese.log/analytics)

## Record (`community.cheese.log`)

Type: record · key tid

### Properties

- `action` (string, required): What the user did or wants to do with the cheese (e.g., ate, bought, wishlisted)
  - Constraints: maxLength: 50, knownValues: ate | bought | wishlisted
- `cheeseRefs` (array, required): AT-URI references to the canonical cheese type records for this log entry (one or more)
  - Constraints: minLength: 1, maxLength: 20
  - `items` (string · at-uri)
- `cheeses` (array, required): Snapshots of the cheese type fields at the time of logging, aligned by index with cheeseRefs
  - Constraints: minLength: 1, maxLength: 20
  - `items` (ref)
    - Reference: `#cheese`
- `createdAt` (string · datetime, required): Timestamp when the log was created
- `notes` (string): Personal notes about the cheese
  - Constraints: maxLength: 2000
- `photos` (array): Optional photos of the cheese
  - Constraints: maxLength: 4
  - `items` (ref)
    - Reference: `#photo`

## #cheese (`community.cheese.log#cheese`)

Type: object

Cheese type fields embedded in a log entry

### Properties

- `agedWeeks` (integer): Typical aging time in weeks
  - Constraints: minimum: 0
- `aka` (array): Also-known-as names for the cheese
  - Constraints: maxLength: 20
  - `items` (string)
    - Constraints: maxLength: 200
- `availableMonths` (array): Months the cheese is available (1-12) if seasonal
  - Constraints: maxLength: 12
  - `items` (integer)
    - Constraints: minimum: 1, maximum: 12
- `description` (string): General description of the cheese
  - Constraints: maxLength: 5000
- `link` (string · uri): Optional reference link about the cheese
  - Constraints: maxLength: 500
- `milk` (string): Milk source (e.g., cow, goat, sheep, buffalo, mixed)
  - Constraints: maxLength: 100
- `name` (string, required): Name of the cheese
  - Constraints: maxLength: 200
- `origin` (ref): Geographic and producer origin of the cheese
  - Reference: `#origin`
- `pasteurized` (boolean): Whether the cheese is made from pasteurized milk
- `rind` (string): Rind type (e.g., washed, bloomy, natural)
  - Constraints: maxLength: 100
- `seasonal` (boolean): Whether the cheese has restricted seasonal availability
- `servingTempCelsius` (ref): Recommended serving temperature range in Celsius
  - Reference: `#temperatureRange`
- `tastingNotes` (string): Tasting notes and flavor profile
  - Constraints: maxLength: 2000
- `texture` (string): Texture classification
  - Constraints: maxLength: 50, knownValues: soft | semi-soft | semi-hard | hard | blue

## #origin (`community.cheese.log#origin`)

Type: object

Geographic and producer origin of a cheese

### Properties

- `country` (string)
  - Constraints: maxLength: 100
- `producer` (string)
  - Constraints: maxLength: 200
- `region` (string)
  - Constraints: maxLength: 100

## #photo (`community.cheese.log#photo`)

Type: blob

A photo of the cheese

Constraints: maxSize: 10000000, accept: image/*

## #temperatureRange (`community.cheese.log#temperatureRange`)

Type: object

A numeric range

### Properties

- `max` (integer, required): Maximum value
- `min` (integer, required): Minimum value

## Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "cheese": {
      "description": "Cheese type fields embedded in a log entry",
      "properties": {
        "agedWeeks": {
          "description": "Typical aging time in weeks",
          "minimum": 0,
          "type": "integer"
        },
        "aka": {
          "description": "Also-known-as names for the cheese",
          "items": {
            "maxLength": 200,
            "type": "string"
          },
          "maxLength": 20,
          "type": "array"
        },
        "availableMonths": {
          "description": "Months the cheese is available (1-12) if seasonal",
          "items": {
            "maximum": 12,
            "minimum": 1,
            "type": "integer"
          },
          "maxLength": 12,
          "type": "array"
        },
        "description": {
          "description": "General description of the cheese",
          "maxLength": 5000,
          "type": "string"
        },
        "link": {
          "description": "Optional reference link about the cheese",
          "format": "uri",
          "maxLength": 500,
          "type": "string"
        },
        "milk": {
          "description": "Milk source (e.g., cow, goat, sheep, buffalo, mixed)",
          "maxLength": 100,
          "type": "string"
        },
        "name": {
          "description": "Name of the cheese",
          "maxLength": 200,
          "type": "string"
        },
        "origin": {
          "description": "Geographic and producer origin of the cheese",
          "ref": "#origin",
          "type": "ref"
        },
        "pasteurized": {
          "description": "Whether the cheese is made from pasteurized milk",
          "type": "boolean"
        },
        "rind": {
          "description": "Rind type (e.g., washed, bloomy, natural)",
          "maxLength": 100,
          "type": "string"
        },
        "seasonal": {
          "description": "Whether the cheese has restricted seasonal availability",
          "type": "boolean"
        },
        "servingTempCelsius": {
          "description": "Recommended serving temperature range in Celsius",
          "ref": "#temperatureRange",
          "type": "ref"
        },
        "tastingNotes": {
          "description": "Tasting notes and flavor profile",
          "maxLength": 2000,
          "type": "string"
        },
        "texture": {
          "description": "Texture classification",
          "knownValues": [
            "soft",
            "semi-soft",
            "semi-hard",
            "hard",
            "blue"
          ],
          "maxLength": 50,
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "main": {
      "description": "A personal log entry about one or more cheeses",
      "key": "tid",
      "record": {
        "properties": {
          "action": {
            "description": "What the user did or wants to do with the cheese (e.g., ate, bought, wishlisted)",
            "knownValues": [
              "ate",
              "bought",
              "wishlisted"
            ],
            "maxLength": 50,
            "type": "string"
          },
          "cheeseRefs": {
            "description": "AT-URI references to the canonical cheese type records for this log entry (one or more)",
            "items": {
              "format": "at-uri",
              "type": "string"
            },
            "maxLength": 20,
            "minLength": 1,
            "type": "array"
          },
          "cheeses": {
            "description": "Snapshots of the cheese type fields at the time of logging, aligned by index with cheeseRefs",
            "items": {
              "ref": "#cheese",
              "type": "ref"
            },
            "maxLength": 20,
            "minLength": 1,
            "type": "array"
          },
          "createdAt": {
            "description": "Timestamp when the log was created",
            "format": "datetime",
            "type": "string"
          },
          "notes": {
            "description": "Personal notes about the cheese",
            "maxLength": 2000,
            "type": "string"
          },
          "photos": {
            "description": "Optional photos of the cheese",
            "items": {
              "ref": "#photo",
              "type": "ref"
            },
            "maxLength": 4,
            "type": "array"
          }
        },
        "required": [
          "cheeseRefs",
          "cheeses",
          "action",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "origin": {
      "description": "Geographic and producer origin of a cheese",
      "properties": {
        "country": {
          "maxLength": 100,
          "type": "string"
        },
        "producer": {
          "maxLength": 200,
          "type": "string"
        },
        "region": {
          "maxLength": 100,
          "type": "string"
        }
      },
      "type": "object"
    },
    "photo": {
      "accept": [
        "image/*"
      ],
      "description": "A photo of the cheese",
      "maxSize": 10000000,
      "type": "blob"
    },
    "temperatureRange": {
      "description": "A numeric range",
      "properties": {
        "max": {
          "description": "Maximum value",
          "type": "integer"
        },
        "min": {
          "description": "Minimum value",
          "type": "integer"
        }
      },
      "required": [
        "min",
        "max"
      ],
      "type": "object"
    }
  },
  "description": "A cheese log: take notes on buying, eating, or wanting to do either of those things with cheese",
  "id": "community.cheese.log",
  "lexicon": 1
}
```
