# Calendar

## What it is responsible for

Calendar manages creation and updating appointments, turning event inputs into calendar-event representations. Its documented scope includes simplified event creation, all-day events, recurring weekly meetings, retrieval responses and query parameters, and date formatting for Microsoft Graph. `OutlookCalendarEvent` models an event, while `DateTimeTimeZone` carries date and time with timezone information. The subsystem also represents event bodies, locations, attendees, organizer/recipient details, response status, and recurrence patterns. `Calendar` is an entry point alongside `EventBody`, `BodyType`, and `Location`. Its enums cover body, location, attendee, response, recurrence-pattern, day-of-week, and week-index properties.

## What it needs, and who needs it

Calendar depends on [Auth](subsystem-outlook-plugin-src-auth) and [Pams](subsystem-pams). Auth and Pams are required by Calendar when it performs calendar work; evidence does not describe their individual roles. `Outlook_plugin/src/taskpane` depends on Calendar. Without Calendar, that taskpane dependency lacks the documented appointment-creation, update, event modeling, recurrence, and calendar-response types.

## Notable members

`Calendar` is the main calendar event class for creating and updating appointments. `OutlookCalendarEvent` is the simplified class for creating calendar events; its simplification distinguishes it from the main appointment class. `PamsCalendarResponse` is the response class when retrieving calendar events, representing retrieval rather than event creation or update.

76 entities in `Outlook_plugin/src/calendar`. **1 other subsystem depends on it**, which makes it the 4th most depended-upon part of this codebase.

## What it is made of

Its 76 entities sit in 9 files under `Outlook_plugin/src/calendar`: 40 functions, 19 classes, 13 type aliases, 2 constants and 2 more.
`calendar.model.ts` holds 36 of them — more than any other file here.
`CalendarServiceTester` declares 8 methods, the widest surface here.

## Where work enters

- [`Calendar`](service-calendar) — `Outlook_plugin/src/calendar/calendar.service.ts`:1
- [`EventBody`](class-eventbody) — `Outlook_plugin/src/calendar/calendar.model.ts`:84
- [`BodyType`](type-bodytype) — `Outlook_plugin/src/calendar/calendar.model.ts`:89
- [`Location`](class-location) — `Outlook_plugin/src/calendar/calendar.model.ts`:94

## How it refuses and fails

1 of its components records a refusal or a failure handler.
Its `catch` blocks handle a failure that already happened in 1 place.

## Boundaries

**1 other subsystem depends on this one** — `Taskpane`. Changing what it exposes changes them.

They hold 9 edges into it between them. 16 edges leave it against 9 arriving — it reads more of this repository than this repository reads of it. What they reach is narrower than the folder: 9 of its 76 members carry every inbound edge — `checkIftherePamsCalendar` (1), `getAccessTokenStandard` (1) and `getCalendarEvents` (1), plus 6 more. Of the 16 it sends out, 12 go to `Auth` — more than to any other.

It depends on `Auth`, `Pams`, and on nothing else in this repository.

## How this code is named

These conventions cover most of the codebase. Learning them is faster than reading an index —
each one lets you find any member of its family without looking it up.

| Pattern | Where | Count | Examples |
|---|---|---|---|
| `check*` | exported symbols | 8 | `checkConfirmation`, `checkIftherePamsCalendar` |
