The Content module powers the public-facing side of Gobarau Academy’s platform — everything a prospective family, current student, or returning alumnus might browse on the school website. It provides structured endpoints for publishing school news articles, listing upcoming events, organising photo galleries, distributing magazine issues and their articles, commemorating graduating classes through the yearbook, and showcasing testimonials from parents and alumni. AllDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/muhammadbugaje/gobarau_backend/llms.txt
Use this file to discover all available pages before exploring further.
GET and retrieve actions on every content endpoint are fully public (no authentication required) via ContentPublicReadOnlyModelViewSet, while POST, PUT, PATCH, and DELETE operations require an authenticated staff or admin user. Image and file uploads are handled via Django’s file storage backend.
All image and file fields (
featured_image, cover_image, image, photo, pdf_url, etc.) are stored via Django’s configured file storage. Send these as multipart/form-data requests when uploading files.News Categories
News categories provide organisational taxonomy for news posts. Theslug field is automatically generated from the category name on first save — you do not need to supply it.
List & Create News Categories
Endpoint:GET/POST /api/content/news-categories/
Permissions: GET — public · POST/PUT/PATCH/DELETE — IsAuthenticated, IsStaffOrAdmin
Request Fields (POST)
Unique category name (max 100 characters). Must be unique across all categories.
URL-friendly slug (max 120 characters). Auto-generated from
name if omitted.Optional longer description of the category. Defaults to empty string.
Example — Create a news category
Response Fields
Auto-incrementing integer primary key for the category.
Unique public UUID identifier for the category (from
BaseModel).Category name.
Auto-generated URL slug derived from the name.
Category description.
Record creation timestamp (from
BaseModel).Last modification timestamp (from
BaseModel).News Posts
News posts are the primary editorial content published on the school website. Posts can be drafted before publishing and optionally featured to highlight them on the homepage.Only posts with
is_published: true should be surfaced on the public-facing website. Always check this flag when querying posts for display. The slug field is auto-generated from the title on first save; supply it explicitly if you need a custom URL-friendly identifier.List & Create News Posts
Endpoint:GET/POST /api/content/news-posts/
Permissions: GET — public · POST/PUT/PATCH/DELETE — IsAuthenticated, IsStaffOrAdmin
Request Fields (POST)
Article headline (max 200 characters).
URL slug (max 220 characters). Auto-generated from
title if left blank. Must be unique.Full article body text (HTML or plain text).
Primary key of the
NewsCategory. Set to null for uncategorised posts.Optional hero image for the article. Upload as
multipart/form-data.ISO 8601 datetime for the post’s publication date. Can be a future date to schedule a post.
When
true, the post is highlighted in featured/homepage sections. Defaults to false.Whether the post is live and publicly visible. Defaults to
false. Set to true to publish.Example — Create and immediately publish a news post
Response Fields
Auto-incrementing integer primary key for the post.
Unique public UUID identifier for the post (from
AuditMixin → BaseModel).Article headline.
Auto-generated or custom URL slug.
Full article body.
Foreign key to the
NewsCategory, or null.URL of the uploaded image, or
null.Publication datetime.
Whether the post is featured.
Whether the post is publicly visible.
Primary key of the
User who created the post (from AuditMixin).Primary key of the
User who last updated the post (from AuditMixin).Record creation timestamp (from
AuditMixin → BaseModel).Last modification timestamp (from
AuditMixin → BaseModel).Events
The Events endpoint surfaces upcoming and past school events on the public calendar. Each event can have a cover image and be flagged as public or internal-only.List & Create Events
Endpoint:GET/POST /api/content/events/
Permissions: GET — public · POST/PUT/PATCH/DELETE — IsAuthenticated, IsStaffOrAdmin
Request Fields (POST)
Event title (max 200 characters).
Full description of the event. Defaults to empty string.
Date of the event in
YYYY-MM-DD format.Event venue or location (max 200 characters). Defaults to empty string.
Optional cover image. Upload as
multipart/form-data.When
true (default), the event appears on the public calendar. Set false for internal events.Example — Create an event
Response Fields
Auto-incrementing integer primary key for the event.
Unique public UUID identifier for the event (from
BaseModel).Event title.
Event description.
Date of the event.
Event venue.
URL of the cover image, or
null.Whether the event is publicly visible.
Record creation timestamp (from
BaseModel).Last modification timestamp (from
BaseModel).Gallery Albums
Gallery albums are named containers grouping related photos together. An album can be linked to anEvent to automatically associate the photos with that occasion.
List & Create Gallery Albums
Endpoint:GET/POST /api/content/gallery-albums/
Permissions: GET — public · POST/PUT/PATCH/DELETE — IsAuthenticated, IsStaffOrAdmin
Request Fields (POST)
Album title (max 200 characters).
Optional description of the album’s contents. Defaults to empty string.
Thumbnail/cover image for the album. Upload as
multipart/form-data.Optional foreign key to an
Event. Links the album to a specific school event. Pass null for standalone albums.Example — Create a gallery album for an event
Response Fields
Auto-incrementing integer primary key for the album.
Unique public UUID identifier for the album (from
BaseModel).Album title.
Album description.
URL of the cover image, or
null.Primary key of the linked
Event, or null.Record creation timestamp (from
BaseModel).Last modification timestamp (from
BaseModel).Gallery Images
Individual photos belong to aGalleryAlbum. Each image has an optional caption, an ordering index for display sequence, and a reference to the staff member who uploaded it.
List & Create Gallery Images
Endpoint:GET/POST /api/content/gallery-images/
Permissions: GET — public · POST/PUT/PATCH/DELETE — IsAuthenticated, IsStaffOrAdmin
Request Fields (POST)
Primary key of the parent
GalleryAlbum.The photo to upload. Send as
multipart/form-data; stored under content/gallery/images/.Optional descriptive caption for the image (max 200 characters). Defaults to empty string.
Display order within the album. Lower values appear first. Defaults to
0.Primary key of the
User uploading the image. Can be left null if the uploader is not tracked.Example — Upload a gallery image
Response Fields
Auto-incrementing integer primary key for the gallery image.
Unique public UUID identifier for the image (from
BaseModel).Primary key of the parent album.
URL of the uploaded photo.
Image caption.
Display order within the album.
Primary key of the uploader
User, or null.Record creation timestamp (from
BaseModel).Last modification timestamp (from
BaseModel).Magazine Issues
Magazine issues represent individual editions of the school’s publication. Each issue has a unique number and volume identifier, a publication date, an optional cover image, and an optional PDF file.List & Create Magazine Issues
Endpoint:GET/POST /api/content/magazine-issues/
Permissions: GET — public · POST/PUT/PATCH/DELETE — IsAuthenticated, IsStaffOrAdmin
Request Fields (POST)
Issue title (max 200 characters).
Issue number identifier (max 20 characters), e.g.
"12" or "Q3".Volume identifier (max 20 characters), e.g.
"5" or "V".Publication date in
YYYY-MM-DD format.Magazine cover image. Upload as
multipart/form-data.Full PDF of the magazine issue. Upload as
multipart/form-data; stored under content/magazines/pdfs/.Example — Create a magazine issue
Response Fields
Auto-incrementing integer primary key for the magazine issue.
Unique public UUID identifier for the issue (from
BaseModel).Issue title.
Issue number.
Volume identifier.
Publication date.
URL of the cover image, or
null.URL of the PDF file, or
null.Record creation timestamp (from
BaseModel).Last modification timestamp (from
BaseModel).Magazine Articles
Magazine articles are the individual pieces of writing within aMagazineIssue. They carry an author name (which need not be a system user — it can be a student name), article body, and the page number within the printed issue.
List & Create Magazine Articles
Endpoint:GET/POST /api/content/magazine-articles/
Permissions: GET — public · POST/PUT/PATCH/DELETE — IsAuthenticated, IsStaffOrAdmin
Request Fields (POST)
Primary key of the parent
MagazineIssue.Article title (max 200 characters).
Name of the article’s author (max 200 characters). Can be a student name, staff name, or pen name. Defaults to empty string.
Full article body text.
Page number in the printed magazine on which this article starts. Defaults to
0.Example — Create a magazine article
Response Fields
Auto-incrementing integer primary key for the article.
Unique public UUID identifier for the article (from
BaseModel).Primary key of the parent
MagazineIssue.Article title.
Author’s name.
Full article body.
Starting page number in the printed issue.
Record creation timestamp (from
BaseModel).Last modification timestamp (from
BaseModel).Yearbook Sets
A yearbook set groups all student entries for a single academic session under one cover. It is linked to anAcademicSession to tie it to the school calendar.
List & Create Yearbook Sets
Endpoint:GET/POST /api/content/yearbook-sets/
Permissions: GET — public · POST/PUT/PATCH/DELETE — IsAuthenticated, IsStaffOrAdmin
Request Fields (POST)
Primary key of the
AcademicSession this yearbook commemorates.Title of the yearbook set (max 200 characters), e.g.
"Class of 2025".Date the yearbook was published in
YYYY-MM-DD format.Cover image for the yearbook. Upload as
multipart/form-data.Example — Create a yearbook set
Response Fields
Auto-incrementing integer primary key for the yearbook set.
Unique public UUID identifier for the yearbook set (from
BaseModel).Primary key of the
AcademicSession.Yearbook title.
Publication date.
URL of the cover image, or
null.Record creation timestamp (from
BaseModel).Last modification timestamp (from
BaseModel).Yearbook Entries
EachYearbookEntry represents a single student’s profile page within a yearbook set. It stores their portrait photo, nickname, favourite quote, and future aspiration.
List & Create Yearbook Entries
Endpoint:GET/POST /api/content/yearbook-entries/
Permissions: GET — public · POST/PUT/PATCH/DELETE — IsAuthenticated, IsStaffOrAdmin
Request Fields (POST)
Primary key of the parent
YearbookSet.Primary key of the
StudentProfile this entry belongs to.Student portrait for the yearbook page. Upload as
multipart/form-data; stored under content/yearbooks/students/.Student’s nickname or alias (max 100 characters). Defaults to empty string.
Student’s favourite quote or personal message. Defaults to empty string.
Student’s stated future career or life goal. Defaults to empty string.
Example — Create a yearbook entry
Response Fields
Auto-incrementing integer primary key for the yearbook entry.
Unique public UUID identifier for the entry (from
BaseModel).Primary key of the parent
YearbookSet.Primary key of the
StudentProfile.URL of the student portrait, or
null.Student’s nickname.
Student’s quote.
Student’s future aspiration.
Record creation timestamp (from
BaseModel).Last modification timestamp (from
BaseModel).Testimonials
Testimonials are endorsements and personal accounts from alumni, parents, or community members. They can be marked as featured to surface prominently on the school’s homepage or landing page.List & Create Testimonials
Endpoint:GET/POST /api/content/testimonials/
Permissions: GET — public · POST/PUT/PATCH/DELETE — IsAuthenticated, IsStaffOrAdmin
Request Fields (POST)
Full name of the person giving the testimonial (max 200 characters).
Person’s role or relationship to the school, e.g.
"Parent", "Alumni – Class of 2018" (max 100 characters). Defaults to empty string.The testimonial text.
Optional portrait of the testimonial author. Upload as
multipart/form-data; stored under content/testimonials/.When
true, the testimonial is shown in featured/homepage carousels. Defaults to false.ISO 8601 datetime the testimonial is considered published. Can be a future date.
Example — Create a featured testimonial
Response Fields
Auto-incrementing integer primary key for the testimonial.
Unique public UUID identifier for the testimonial (from
BaseModel).Name of the person giving the testimonial.
Their role or relationship to the school.
The testimonial message.
URL of the author’s portrait, or
null.Whether the testimonial is featured.
Publication datetime, or
null if unscheduled.Record creation timestamp (from
BaseModel).Last modification timestamp (from
BaseModel).