pub struct Notice {Show 17 fields
pub id: Uuid,
pub building_id: Uuid,
pub author_id: Uuid,
pub notice_type: NoticeType,
pub category: NoticeCategory,
pub title: String,
pub content: String,
pub status: NoticeStatus,
pub is_pinned: bool,
pub published_at: Option<DateTime<Utc>>,
pub expires_at: Option<DateTime<Utc>>,
pub archived_at: Option<DateTime<Utc>>,
pub event_date: Option<DateTime<Utc>>,
pub event_location: Option<String>,
pub contact_info: Option<String>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}Expand description
Community notice board entry
Represents an announcement, event, lost & found item, or classified ad posted on the building’s community board.
§Business Rules
- Title must be 5-255 characters
- Content must be non-empty (max 10,000 characters)
- Draft notices cannot be pinned
- Only published notices are visible to building members
- Expired notices are automatically marked as Expired
- Events must have event_date and event_location
- Lost & Found and Classified Ads should have contact_info
Fields§
§id: Uuid§building_id: Uuid§notice_type: NoticeType§category: NoticeCategory§title: String§content: String§status: NoticeStatus§is_pinned: bool§published_at: Option<DateTime<Utc>>§expires_at: Option<DateTime<Utc>>§archived_at: Option<DateTime<Utc>>§event_date: Option<DateTime<Utc>>§event_location: Option<String>§contact_info: Option<String>§created_at: DateTime<Utc>§updated_at: DateTime<Utc>Implementations§
Source§impl Notice
impl Notice
Sourcepub fn new(
building_id: Uuid,
author_id: Uuid,
notice_type: NoticeType,
category: NoticeCategory,
title: String,
content: String,
event_date: Option<DateTime<Utc>>,
event_location: Option<String>,
contact_info: Option<String>,
) -> Result<Self, String>
pub fn new( building_id: Uuid, author_id: Uuid, notice_type: NoticeType, category: NoticeCategory, title: String, content: String, event_date: Option<DateTime<Utc>>, event_location: Option<String>, contact_info: Option<String>, ) -> Result<Self, String>
Create a new notice (Draft status)
§Validation
- Title must be 5-255 characters
- Content must be non-empty (max 10,000 characters)
- Events must have event_date and event_location
Sourcepub fn pin(&mut self) -> Result<(), String>
pub fn pin(&mut self) -> Result<(), String>
Pin notice to top of board
§Business Rules
- Only Published notices can be pinned
- Draft, Archived, Expired notices cannot be pinned
Sourcepub fn is_expired(&self) -> bool
pub fn is_expired(&self) -> bool
Check if notice is expired
Returns true if expires_at is set and is in the past
Sourcepub fn update_content(
&mut self,
title: Option<String>,
content: Option<String>,
category: Option<NoticeCategory>,
event_date: Option<Option<DateTime<Utc>>>,
event_location: Option<Option<String>>,
contact_info: Option<Option<String>>,
expires_at: Option<Option<DateTime<Utc>>>,
) -> Result<(), String>
pub fn update_content( &mut self, title: Option<String>, content: Option<String>, category: Option<NoticeCategory>, event_date: Option<Option<DateTime<Utc>>>, event_location: Option<Option<String>>, contact_info: Option<Option<String>>, expires_at: Option<Option<DateTime<Utc>>>, ) -> Result<(), String>
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Notice
impl<'de> Deserialize<'de> for Notice
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for Notice
impl RefUnwindSafe for Notice
impl Send for Notice
impl Sync for Notice
impl Unpin for Notice
impl UnwindSafe for Notice
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Chain<T> for T
impl<T> Chain<T> for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Fake for T
impl<T> Fake for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreCreates a shared type from an unshared type.