From 570ca901e61d7a5d1b12d10c2b2c8639cb0635b1 Mon Sep 17 00:00:00 2001 From: "benjamin.747" Date: Tue, 15 Jul 2025 20:00:32 +0800 Subject: [PATCH] feat(UI): added comment/title update API --- jupiter/src/storage/conversation_storage.rs | 19 ++ jupiter/src/storage/issue_storage.rs | 14 ++ jupiter/src/storage/mr_storage.rs | 25 ++- mono/src/api/conversation/conv_router.rs | 52 +++++- mono/src/api/conversation/mod.rs | 2 +- mono/src/api/issue/issue_router.rs | 66 ++++--- mono/src/api/mr/mr_router.rs | 34 ++-- moon/api/lib/demo_orgs/data/calls.json | 2 +- moon/api/lib/demo_orgs/data/notes.json | 2 +- .../web/hooks/issues/useDeleteIssueComment.ts | 8 +- .../web/hooks/issues/usePostIssueComment.ts | 4 +- .../web/hooks/useDeleteMrCommentDelete.ts | 8 +- moon/apps/web/hooks/usePostMrComment.ts | 4 +- moon/packages/types/generated.ts | 168 ++++++++++++------ 14 files changed, 286 insertions(+), 122 deletions(-) diff --git a/jupiter/src/storage/conversation_storage.rs b/jupiter/src/storage/conversation_storage.rs index 9449f72d1..142e74582 100644 --- a/jupiter/src/storage/conversation_storage.rs +++ b/jupiter/src/storage/conversation_storage.rs @@ -1,5 +1,6 @@ use std::ops::Deref; +use sea_orm::prelude::Expr; use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, IntoActiveModel, QueryFilter}; use callisto::sea_orm_active_enums::ConvTypeEnum; @@ -35,6 +36,24 @@ impl ConversationStorage { Ok(res.id) } + pub async fn update_comment( + &self, + comment_id: i64, + comment: Option, + ) -> Result<(), MegaError> { + mega_conversation::Entity::update_many() + .col_expr(mega_conversation::Column::Comment, Expr::value(comment)) + .col_expr( + mega_conversation::Column::UpdatedAt, + Expr::value(chrono::Utc::now().naive_utc()), + ) + .filter(mega_conversation::Column::Id.eq(comment_id)) + .filter(mega_conversation::Column::ConvType.eq(ConvTypeEnum::Comment)) + .exec(self.get_connection()) + .await?; + Ok(()) + } + pub async fn remove_conversation(&self, id: i64) -> Result<(), MegaError> { mega_conversation::Entity::delete_by_id(id) .exec(self.get_connection()) diff --git a/jupiter/src/storage/issue_storage.rs b/jupiter/src/storage/issue_storage.rs index bb87b876e..ce5007e42 100644 --- a/jupiter/src/storage/issue_storage.rs +++ b/jupiter/src/storage/issue_storage.rs @@ -1,6 +1,7 @@ use std::collections::HashMap; use std::ops::Deref; +use sea_orm::prelude::Expr; use sea_orm::{ ActiveModelTrait, ColumnTrait, Condition, EntityTrait, IntoActiveModel, JoinType, PaginatorTrait, QueryFilter, QuerySelect, RelationTrait, Set, TransactionTrait, @@ -163,6 +164,19 @@ impl IssueStorage { Ok(res) } + pub async fn edit_title(&self, link: &str, title: &str) -> Result<(), MegaError> { + mega_issue::Entity::update_many() + .col_expr(mega_issue::Column::Title, Expr::value(title)) + .col_expr( + mega_issue::Column::UpdatedAt, + Expr::value(chrono::Utc::now().naive_utc()), + ) + .filter(mega_issue::Column::Link.eq(link)) + .exec(self.get_connection()) + .await?; + Ok(()) + } + pub async fn close_issue(&self, link: &str) -> Result<(), MegaError> { if let Some(model) = self.get_issue(link).await.unwrap() { let mut issue = model.into_active_model(); diff --git a/jupiter/src/storage/mr_storage.rs b/jupiter/src/storage/mr_storage.rs index 3694f1f3c..fe7ce7ed9 100644 --- a/jupiter/src/storage/mr_storage.rs +++ b/jupiter/src/storage/mr_storage.rs @@ -2,6 +2,7 @@ use std::collections::HashMap; use std::ops::Deref; use common::model::Pagination; +use sea_orm::prelude::Expr; use sea_orm::{ ActiveModelTrait, ColumnTrait, Condition, EntityTrait, IntoActiveModel, JoinType, PaginatorTrait, QueryFilter, QuerySelect, RelationTrait, Set, @@ -146,12 +147,11 @@ impl MrStorage { &self, link: &str, ) -> Result)>, MegaError> { - let assignees: Vec<(mega_mr::Model, Vec)> = - mega_mr::Entity::find() - .filter(mega_mr::Column::Link.eq(link)) - .find_with_related(item_assignees::Entity) - .all(self.get_connection()) - .await?; + let assignees: Vec<(mega_mr::Model, Vec)> = mega_mr::Entity::find() + .filter(mega_mr::Column::Link.eq(link)) + .find_with_related(item_assignees::Entity) + .all(self.get_connection()) + .await?; Ok(assignees.first().cloned()) } @@ -181,6 +181,19 @@ impl MrStorage { Ok(link) } + pub async fn edit_title(&self, link: &str, title: &str) -> Result<(), MegaError> { + mega_mr::Entity::update_many() + .col_expr(mega_mr::Column::Title, Expr::value(title)) + .col_expr( + mega_mr::Column::UpdatedAt, + Expr::value(chrono::Utc::now().naive_utc()), + ) + .filter(mega_mr::Column::Link.eq(link)) + .exec(self.get_connection()) + .await?; + Ok(()) + } + pub async fn close_mr(&self, model: mega_mr::Model) -> Result<(), MegaError> { let mut a_model = model.into_active_model(); a_model.status = Set(MergeStatusEnum::Closed); diff --git a/mono/src/api/conversation/conv_router.rs b/mono/src/api/conversation/conv_router.rs index 4a6b36292..887bb34e2 100644 --- a/mono/src/api/conversation/conv_router.rs +++ b/mono/src/api/conversation/conv_router.rs @@ -6,7 +6,7 @@ use utoipa_axum::{router::OpenApiRouter, routes}; use common::model::CommonResult; -use crate::api::conversation::ReactionRequest; +use crate::api::conversation::{ContentPayload, ReactionRequest}; use crate::api::oauth::model::LoginUser; use crate::api::MonoApiServiceState; use crate::{api::error::ApiError, server::https_server::CONV_TAG}; @@ -16,7 +16,9 @@ pub fn routers() -> OpenApiRouter { "/conversation", OpenApiRouter::new() .routes(routes!(comment_reactions)) - .routes(routes!(delete_comment_reaction)), + .routes(routes!(delete_comment_reaction)) + .routes(routes!(delete_comment)) + .routes(routes!(edit_comment)), ) } @@ -74,3 +76,49 @@ async fn delete_comment_reaction( .await?; Ok(Json(CommonResult::success(None))) } + +/// Delete Comment +#[utoipa::path( + delete, + params( + ("comment_id", description = "A numeric ID representing a comment"), + ), + path = "/{comment_id}", + responses( + (status = 200, body = CommonResult, content_type = "application/json") + ), + tag = CONV_TAG +)] +async fn delete_comment( + Path(comment_id): Path, + state: State, +) -> Result>, ApiError> { + state.conv_stg().remove_conversation(comment_id).await?; + Ok(Json(CommonResult::success(None))) +} + +/// Edit comment +#[utoipa::path( + post, + params( + ("comment_id", description = "A numeric ID representing a comment"), + ), + path = "/{comment_id}", + request_body = ContentPayload, + responses( + (status = 200, body = CommonResult, content_type = "application/json") + ), + tag = CONV_TAG +)] +async fn edit_comment( + _: LoginUser, + Path(comment_id): Path, + state: State, + Json(payload): Json, +) -> Result>, ApiError> { + state + .conv_stg() + .update_comment(comment_id, Some(payload.content)) + .await?; + Ok(Json(CommonResult::success(None))) +} diff --git a/mono/src/api/conversation/mod.rs b/mono/src/api/conversation/mod.rs index d820988ff..bad13e66b 100644 --- a/mono/src/api/conversation/mod.rs +++ b/mono/src/api/conversation/mod.rs @@ -73,7 +73,7 @@ pub struct ReactionItem { } #[derive(Deserialize, ToSchema)] -pub struct SaveCommentRequest { +pub struct ContentPayload { pub content: String, } diff --git a/mono/src/api/issue/issue_router.rs b/mono/src/api/issue/issue_router.rs index 6f1e2837a..22bf15d65 100644 --- a/mono/src/api/issue/issue_router.rs +++ b/mono/src/api/issue/issue_router.rs @@ -9,7 +9,7 @@ use common::model::{CommonPage, CommonResult, PageParams}; use jupiter::service::issue_service::IssueService; use crate::api::{ - api_common::model::ListPayload, conversation::SaveCommentRequest, label::LabelUpdatePayload, + api_common::model::ListPayload, conversation::ContentPayload, label::LabelUpdatePayload, }; use crate::api::{ api_common::{self, model::AssigneeUpdatePayload}, @@ -31,9 +31,9 @@ pub fn routers() -> OpenApiRouter { .routes(routes!(reopen_issue)) .routes(routes!(issue_detail)) .routes(routes!(save_comment)) - .routes(routes!(delete_comment)) .routes(routes!(labels)) - .routes(routes!(assignees)), + .routes(routes!(assignees)) + .routes(routes!(edit_title)), ) } @@ -79,7 +79,10 @@ async fn issue_detail( state: State, ) -> Result>, ApiError> { let issue_service: IssueService = state.storage.issue_service.clone(); - let issue_details: IssueDetailRes = issue_service.get_issue_details(&link, user.username).await?.into(); + let issue_details: IssueDetailRes = issue_service + .get_issue_details(&link, user.username) + .await? + .into(); Ok(Json(CommonResult::success(Some(issue_details)))) } @@ -182,7 +185,7 @@ async fn reopen_issue( ("link", description = "Issue link"), ), path = "/{link}/comment", - request_body = SaveCommentRequest, + request_body = ContentPayload, responses( (status = 200, body = CommonResult, content_type = "application/json") ), @@ -192,7 +195,7 @@ async fn save_comment( user: LoginUser, Path(link): Path, state: State, - Json(payload): Json, + Json(payload): Json, ) -> Result>, ApiError> { state .conv_stg() @@ -206,28 +209,7 @@ async fn save_comment( Ok(Json(CommonResult::success(None))) } -/// Delete Issue Comment -#[utoipa::path( - delete, - params( - ("id", description = "Conversation id"), - ), - path = "/comment/{id}/delete", - responses( - (status = 200, body = CommonResult, content_type = "application/json") - ), - tag = ISSUE_TAG -)] -async fn delete_comment( - _: LoginUser, - Path(id): Path, - state: State, -) -> Result>, ApiError> { - state.conv_stg().remove_conversation(id).await?; - Ok(Json(CommonResult::success(None))) -} - -/// update issue related labels +/// Update issue related labels #[utoipa::path( post, path = "/labels", @@ -245,7 +227,7 @@ async fn labels( api_common::label_assignee::label_update(user, state, payload, String::from("issue")).await } -/// update issue related assignees +/// Update issue related assignees #[utoipa::path( post, path = "/assignees", @@ -262,3 +244,29 @@ async fn assignees( ) -> Result>, ApiError> { api_common::label_assignee::assignees_update(user, state, payload, String::from("issue")).await } + +/// Edit issue title +#[utoipa::path( + post, + params( + ("link", description = "A string ID representing a Issue"), + ), + path = "/{link}/title", + request_body = ContentPayload, + responses( + (status = 200, body = CommonResult, content_type = "application/json") + ), + tag = ISSUE_TAG +)] +async fn edit_title( + _: LoginUser, + Path(link): Path, + state: State, + Json(payload): Json, +) -> Result>, ApiError> { + state + .issue_stg() + .edit_title(&link, &payload.content) + .await?; + Ok(Json(CommonResult::success(None))) +} diff --git a/mono/src/api/mr/mr_router.rs b/mono/src/api/mr/mr_router.rs index b843a478c..c58b320c7 100644 --- a/mono/src/api/mr/mr_router.rs +++ b/mono/src/api/mr/mr_router.rs @@ -19,7 +19,7 @@ use crate::api::{ self, model::{AssigneeUpdatePayload, ListPayload}, }, - conversation::SaveCommentRequest, + conversation::ContentPayload, issue::ItemRes, label::LabelUpdatePayload, mr::{FilesChangedList, MRDetailRes, MrFilesRes, MuiTreeNode}, @@ -40,9 +40,9 @@ pub fn routers() -> OpenApiRouter { .routes(routes!(mr_files_changed)) .routes(routes!(mr_files_list)) .routes(routes!(save_comment)) - .routes(routes!(delete_comment)) .routes(routes!(labels)) - .routes(routes!(assignees)), + .routes(routes!(assignees)) + .routes(routes!(edit_title)), ) } @@ -299,7 +299,7 @@ async fn mr_files_list( ("link", description = "MR link"), ), path = "/{link}/comment", - request_body = SaveCommentRequest, + request_body = ContentPayload, responses( (status = 200, body = CommonResult, content_type = "application/json") ), @@ -309,7 +309,7 @@ async fn save_comment( user: LoginUser, Path(link): Path, state: State, - Json(payload): Json, + Json(payload): Json, ) -> Result>, ApiError> { let res = state.mr_stg().get_mr(&link).await?; let model = res.ok_or(MegaError::with_message("Not Found"))?; @@ -325,23 +325,29 @@ async fn save_comment( Ok(Json(CommonResult::success(None))) } -/// Delete Comment +/// Edit MR title #[utoipa::path( - delete, + post, params( - ("conv_id", description = "Conversation id"), + ("link", description = "A string ID representing a Merge Request"), ), - path = "/comment/{conv_id}/delete", + path = "/{link}/title", + request_body = ContentPayload, responses( (status = 200, body = CommonResult, content_type = "application/json") ), tag = MR_TAG )] -async fn delete_comment( - Path(conv_id): Path, +async fn edit_title( + _: LoginUser, + Path(link): Path, state: State, + Json(payload): Json, ) -> Result>, ApiError> { - state.conv_stg().remove_conversation(conv_id).await?; + state + .mr_stg() + .edit_title(&link, &payload.content) + .await?; Ok(Json(CommonResult::success(None))) } @@ -365,7 +371,7 @@ fn extract_files_with_status(diff_output: &str) -> HashMap { files } -/// update mr related labels +/// Update mr related labels #[utoipa::path( post, path = "/labels", @@ -383,7 +389,7 @@ async fn labels( api_common::label_assignee::label_update(user, state, payload, String::from("mr")).await } -/// update MR related assignees +/// Update MR related assignees #[utoipa::path( post, path = "/assignees", diff --git a/moon/api/lib/demo_orgs/data/calls.json b/moon/api/lib/demo_orgs/data/calls.json index ee1e8aaa6..315d646a2 100644 --- a/moon/api/lib/demo_orgs/data/calls.json +++ b/moon/api/lib/demo_orgs/data/calls.json @@ -1 +1 @@ -[{"generated_title":"Park Ranger Rick","peers":["Ranger Rick","Daisy Meadows","Reed Marsh","Cliff Rockwell"],"recordings":[{"file_path":"o/dev-seed-files/park-rec.mp4","transcription_vtt":"WEBVTT\r\n\r\n1\r\n00:00:00.000 --> 00:00:02.600\r\nCliff Rockwell: It says here one o'clock meeting. Who are we meeting with?\r\n\r\n2\r\n00:00:02.600 --> 00:00:03.600\r\nDaisy Meadows: Don't worry about it.\r\n\r\n3\r\n00:00:03.600 --> 00:00:05.100\r\nCliff Rockwell: Oh no, please.\r\n\r\n4\r\n00:00:05.100 --> 00:00:07.400\r\nDaisy Meadows: No, it's important to meet with the park rangers.\r\n\r\n5\r\n00:00:07.400 --> 00:00:09.400\r\nDaisy Meadows: They are the first line of defense.\r\n\r\n6\r\n00:00:09.900 --> 00:00:11.900\r\nRanger Rick: Daisy Meadows!\r\n\r\n7\r\n00:00:12.900 --> 00:00:13.700\r\nDaisy Meadows: Hey, Reed.\r\n\r\n8\r\n00:00:13.700 --> 00:00:15.300\r\nRanger Rick: What's up, pencil pushers?\r\n\r\n9\r\n00:00:15.300 --> 00:00:17.299\r\nRanger Rick: Haverford, good to see you, man.\r\n\r\n10\r\n00:00:18.400 --> 00:00:19.700\r\nRanger Rick: Is it hot in here?\r\n\r\n11\r\n00:00:19.700 --> 00:00:21.400\r\nRanger Rick: I feel hot. Are you guys hot?\r\n\r\n12\r\n00:00:21.400 --> 00:00:23.000\r\nRanger Rick: How you guys doing? I'm good.\r\n\r\n13\r\n00:00:23.000 --> 00:00:25.000\r\nRanger Rick: You guys got any snacks?\r\n\r\n14\r\n00:00:25.000 --> 00:00:27.700\r\nCliff Rockwell: Reed is the head of all outdoor security.\r\n\r\n15\r\n00:00:27.700 --> 00:00:30.500\r\nCliff Rockwell: Why was he transferred from his indoor desk job, you ask?\r\n\r\n16\r\n00:00:30.500 --> 00:00:31.500\r\nCliff Rockwell: Listen.\r\n\r\n17\r\n00:00:31.500 --> 00:00:34.000\r\nRanger Rick: Hey, Daisy, have you seen Avatar?\r\n\r\n18\r\n00:00:34.000 --> 00:00:35.799\r\nRanger Rick: I never saw Avatar.\r\n\r\n19\r\n00:00:35.799 --> 00:00:37.700\r\nRanger Rick: I wanted to read the book first,\r\n\r\n20\r\n00:00:37.700 --> 00:00:41.000\r\nRanger Rick: but then I realized there's no book version of Avatar.\r\n\r\n21\r\n00:00:41.000 --> 00:00:43.299\r\nRanger Rick: What'd you guys do for St. Paddy's Day?\r\n\r\n22\r\n00:00:43.299 --> 00:00:45.000\r\nRanger Rick: I was wearing this t-shirt that said,\r\n\r\n23\r\n00:00:45.000 --> 00:00:46.299\r\nRanger Rick: kiss me, I'm Irish,\r\n\r\n24\r\n00:00:46.299 --> 00:00:48.400\r\nRanger Rick: but no one would kiss me.\r\n\r\n25\r\n00:00:48.400 --> 00:00:49.400\r\nRanger Rick: So!\r\n\r\n26\r\n00:00:50.599 --> 00:00:54.000\r\nRanger Rick: You're too important for me until one of your own gets attacked.\r\n\r\n27\r\n00:00:54.099 --> 00:00:58.099\r\nDaisy Meadows: I just feel like there's more we can do to keep the park safe.\r\n\r\n28\r\n00:00:58.099 --> 00:01:00.500\r\nRanger Rick: Oh, you think you know how to do my job?\r\n\r\n29\r\n00:01:00.500 --> 00:01:01.900\r\nRanger Rick: Well, you might not be so confident\r\n\r\n30\r\n00:01:01.900 --> 00:01:04.300\r\nRanger Rick: once you've walked a mile on my size sevens.\r\n\r\n31\r\n00:01:05.800 --> 00:01:07.099\r\nDaisy Meadows: Kind of small feet.\r\n\r\n32\r\n00:01:07.099 --> 00:01:09.300\r\nCliff Rockwell: Actually, seven is the worldwide average.\r\n\r\n33\r\n00:01:09.300 --> 00:01:10.500\r\nRanger Rick: Boo!\r\n\r\n34\r\n00:01:10.500 --> 00:01:11.300\r\nReed Marsh: I don't know.\r\n\r\n35\r\n00:01:11.300 --> 00:01:13.300\r\nReed Marsh: Daisy, I'd rather be back at the office.\r\n\r\n36\r\n00:01:13.300 --> 00:01:15.000\r\nDaisy Meadows: I know this is painful for you, Reed,\r\n\r\n37\r\n00:01:15.000 --> 00:01:17.000\r\nDaisy Meadows: but you have to be strong.\r\n\r\n38\r\n00:01:18.300 --> 00:01:19.800\r\nRanger Rick: You guys ready?\r\n\r\n39\r\n00:01:20.599 --> 00:01:22.000\r\nDaisy Meadows: Oh, boy, yeah.\r\n\r\n40\r\n00:01:22.000 --> 00:01:23.599\r\nDaisy Meadows: Okay, we're ready.\r\n\r\n41\r\n00:01:23.599 --> 00:01:26.400\r\nRanger Rick: I'm gonna show you guys all the problems we've been facing.\r\n\r\n42\r\n00:01:26.400 --> 00:01:28.599\r\nRanger Rick: I'm gonna show you that we've been doing everything we can.\r\n\r\n43\r\n00:01:28.599 --> 00:01:30.599\r\nDaisy Meadows: I'm looking forward to working together, Reed.\r\n\r\n44\r\n00:01:30.599 --> 00:01:33.599\r\nRanger Rick: And after that, I'm gonna show you this log I found.\r\n\r\n45\r\n00:01:33.599 --> 00:01:35.599\r\nRanger Rick: It's got, like, 50 worms on it.\r\n\r\n46\r\n00:01:36.599 --> 00:01:38.599\r\nRanger Rick: I call it Worm Log.\r\n\r\n47\r\n00:01:40.000 --> 00:01:42.199\r\nRanger Rick: Yeah, I've always been a bit of an outdoorsman.\r\n\r\n48\r\n00:01:42.199 --> 00:01:43.199\r\nRanger Rick: Uh, when I was a kid,\r\n\r\n49\r\n00:01:43.199 --> 00:01:45.500\r\nRanger Rick: my parents used to make me hang out in the backyard a lot\r\n\r\n50\r\n00:01:45.500 --> 00:01:48.199\r\nRanger Rick: and just run around till I got tired.\r\n\r\n51\r\n00:01:48.199 --> 00:01:50.300\r\nRanger Rick: But if there's any criminals out there watching,\r\n\r\n52\r\n00:01:50.300 --> 00:01:52.300\r\nRanger Rick: I never get tired.\r\n\r\n53\r\n00:01:52.900 --> 00:01:54.900\r\nRanger Rick: And ladies, too.\r\n\r\n54\r\n00:01:57.099 --> 00:01:58.500\r\nCliff Rockwell: This thing is a mess.\r\n\r\n55\r\n00:01:58.500 --> 00:02:00.400\r\nRanger Rick: We used to have three carts, actually.\r\n\r\n56\r\n00:02:00.400 --> 00:02:03.599\r\nRanger Rick: The first one got pushed into the creek by some kids.\r\n\r\n57\r\n00:02:03.599 --> 00:02:05.900\r\nRanger Rick: The second one, raccoons got onto.\r\n\r\n58\r\n00:02:05.900 --> 00:02:07.699\r\nRanger Rick: There was urine everywhere.\r\n\r\n59\r\n00:02:07.699 --> 00:02:10.100\r\nRanger Rick: And the third one was recently stolen.\r\n\r\n60\r\n00:02:10.100 --> 00:02:10.899\r\nCliff Rockwell: What's this one?\r\n\r\n61\r\n00:02:10.899 --> 00:02:13.899\r\nRanger Rick: This is the second one, the raccoon piss one.\r\n\r\n62\r\n00:02:14.699 --> 00:02:17.899\r\nRanger Rick: All right, so, we're gonna just head out.\r\n\r\n63\r\n00:02:19.800 --> 00:02:21.600\r\nRanger Rick: Oh, no.\r\n\r\n64\r\n00:02:21.600 --> 00:02:24.600\r\nRanger Rick: You know what? I think we got too much weight.\r\n\r\n65\r\n00:02:24.600 --> 00:02:25.600\r\nDaisy Meadows: Oh.\r\n\r\n66\r\n00:02:25.600 --> 00:02:27.199\r\nDaisy Meadows: That's Cliff, probably.\r\n\r\n67\r\n00:02:27.199 --> 00:02:28.500\r\nCliff Rockwell: Are you serious?\r\n\r\n68\r\n00:02:28.500 --> 00:02:30.600\r\nDaisy Meadows: Cliff, can you get off, please?\r\n\r\n69\r\n00:02:30.600 --> 00:02:33.100\r\nDaisy Meadows: Just run alongside the cart, okay?\r\n\r\n70\r\n00:02:33.100 --> 00:02:34.600\r\nRanger Rick: Okay, here we go.\r\n\r\n71\r\n00:02:34.600 --> 00:02:35.800\r\nDaisy Meadows: Whoa.\r\n\r\n72\r\n00:02:35.800 --> 00:02:38.399\r\nRanger Rick: So, let me tell you a little bit about the park.\r\n\r\n73\r\n00:02:38.399 --> 00:02:40.199\r\nRanger Rick: Uh, up here on the left is, uh,\r\n\r\n74\r\n00:02:40.199 --> 00:02:43.100\r\nRanger Rick: one of our most beautiful grass fields.\r\n\r\n75\r\n00:02:43.100 --> 00:02:45.500\r\nRanger Rick: Uh, it's primarily grass.\r\n\r\n76\r\n00:02:45.500 --> 00:02:47.000\r\nRanger Rick: All right, I'm gonna make a hard left here.\r\n\r\n77\r\n00:02:47.000 --> 00:02:49.600\r\nRanger Rick: Stick with us, Cliff.\r\n\r\n78\r\n00:02:49.600 --> 00:02:51.000\r\nRanger Rick: Hey, is this looking familiar?\r\n\r\n79\r\n00:02:51.000 --> 00:02:53.600\r\nReed Marsh: Uh, yeah, it happened right over there.\r\n\r\n80\r\n00:02:53.600 --> 00:02:55.199\r\nRanger Rick: Oh, yeah.\r\n\r\n81\r\n00:02:55.199 --> 00:02:56.899\r\nRanger Rick: I'm not surprised.\r\n\r\n82\r\n00:02:56.899 --> 00:02:58.600\r\nRanger Rick: Take a look at this path.\r\n\r\n83\r\n00:02:58.600 --> 00:03:01.600\r\nRanger Rick: With budget cuts, we can't afford a single safety light.\r\n\r\n84\r\n00:03:01.600 --> 00:03:03.600\r\nRanger Rick: There's been 10 assaults already this year.\r\n\r\n85\r\n00:03:03.600 --> 00:03:04.800\r\nDaisy Meadows: Wow, really?\r\n\r\n86\r\n00:03:04.800 --> 00:03:06.699\r\nDaisy Meadows: Can't you station a park ranger out here?\r\n\r\n87\r\n00:03:06.699 --> 00:03:09.500\r\nRanger Rick: We have. Who do you think they're assaulting?\r\n\r\n88\r\n00:03:09.500 --> 00:03:12.000\r\nRanger Rick: I'm sorry, I didn't mean to yell.\r\n\r\n89\r\n00:03:12.000 --> 00:03:13.800\r\nDaisy Meadows: One way or another, I'm gonna get money\r\n\r\n90\r\n00:03:13.800 --> 00:03:16.199\r\nDaisy Meadows: so you can protect Reed and all the other\r\n\r\n91\r\n00:03:16.199 --> 00:03:18.800\r\nDaisy Meadows: helpless, pathetic people in this town.\r\n\r\n92\r\n00:03:19.600 --> 00:03:21.199\r\nCliff Rockwell: Oh.\r\n\r\n93\r\n00:03:21.199 --> 00:03:22.800\r\nCliff Rockwell: You guys gotta slow down.\r\n\r\n94\r\n00:03:22.800 --> 00:03:24.000\r\nCliff Rockwell: You guys taking a rest for a minute?\r\n\r\n95\r\n00:03:24.000 --> 00:03:25.399\r\nDaisy Meadows: No, Cliff, sorry, no can do.\r\n\r\n96\r\n00:03:25.399 --> 00:03:27.000\r\nDaisy Meadows: Sun's going down. It's real dangerous out here.\r\n\r\n97\r\n00:03:27.000 --> 00:03:28.000\r\nDaisy Meadows: Let's roll, Reed.\r\n\r\n98\r\n00:03:28.000 --> 00:03:29.600\r\nReed Marsh: Okay, going fast.\r\n\r\n","size":65335581,"duration":233.012,"max_width":1920,"max_height":1080,"summary_sections":[{"section":"summary","response":"

The team met with park rangers to discuss park safety issues. Ranger Rick highlighted recent security challenges and resource limitations. Daisy Meadows committed to securing funds for improved safety measures.

"},{"section":"agenda","response":"

Meeting with Park Rangers

  • Daisy emphasized the importance of meeting with park rangers.

  • Cliff introduced Reed as the head of outdoor security.

  • Daisy expressed a desire to improve park safety.

Park Safety Concerns

  • Daisy and Ranger Rick discussed the need for better park safety measures.

  • Ranger Rick highlighted issues like lack of safety lights due to budget cuts.

  • Daisy committed to securing funds for better protection.

Tour of the Park

  • Ranger Rick led a tour, pointing out key areas and issues.

  • The team observed the park's condition and discussed safety challenges.

  • Reed and Daisy noted specific problem areas during the tour.

Equipment and Resources

  • Ranger Rick mentioned the loss and damage of park carts.

  • The team discussed the impact of limited resources on park safety.

  • Daisy and Cliff acknowledged the need for better equipment.

"},{"section":"next_steps","response":"
  • @Daisy Meadows will secure funding to enhance park safety.

  • @Ranger Rick will show the team the current problems and safety issues in the park.

  • @Daisy Meadows will coordinate with @Reed Marsh to improve park security measures.

  • @Cliff Rockwell will run alongside the cart during the park tour.

  • @Ranger Rick will provide a detailed tour of the park's problem areas.

"}]}]}] \ No newline at end of file +[{"generated_title":"Park Ranger Rick","peers":["Ranger Rick","Daisy Meadows","Reed Marsh","Cliff Rockwell"],"recordings":[{"file_path":"o/dev-seed-files/park-rec.mp4","transcription_vtt":"WEBVTT\n\n1\n00:00:00.000 --> 00:00:02.600\nCliff Rockwell: It says here one o'clock meeting. Who are we meeting with?\n\n2\n00:00:02.600 --> 00:00:03.600\nDaisy Meadows: Don't worry about it.\n\n3\n00:00:03.600 --> 00:00:05.100\nCliff Rockwell: Oh no, please.\n\n4\n00:00:05.100 --> 00:00:07.400\nDaisy Meadows: No, it's important to meet with the park rangers.\n\n5\n00:00:07.400 --> 00:00:09.400\nDaisy Meadows: They are the first line of defense.\n\n6\n00:00:09.900 --> 00:00:11.900\nRanger Rick: Daisy Meadows!\n\n7\n00:00:12.900 --> 00:00:13.700\nDaisy Meadows: Hey, Reed.\n\n8\n00:00:13.700 --> 00:00:15.300\nRanger Rick: What's up, pencil pushers?\n\n9\n00:00:15.300 --> 00:00:17.299\nRanger Rick: Haverford, good to see you, man.\n\n10\n00:00:18.400 --> 00:00:19.700\nRanger Rick: Is it hot in here?\n\n11\n00:00:19.700 --> 00:00:21.400\nRanger Rick: I feel hot. Are you guys hot?\n\n12\n00:00:21.400 --> 00:00:23.000\nRanger Rick: How you guys doing? I'm good.\n\n13\n00:00:23.000 --> 00:00:25.000\nRanger Rick: You guys got any snacks?\n\n14\n00:00:25.000 --> 00:00:27.700\nCliff Rockwell: Reed is the head of all outdoor security.\n\n15\n00:00:27.700 --> 00:00:30.500\nCliff Rockwell: Why was he transferred from his indoor desk job, you ask?\n\n16\n00:00:30.500 --> 00:00:31.500\nCliff Rockwell: Listen.\n\n17\n00:00:31.500 --> 00:00:34.000\nRanger Rick: Hey, Daisy, have you seen Avatar?\n\n18\n00:00:34.000 --> 00:00:35.799\nRanger Rick: I never saw Avatar.\n\n19\n00:00:35.799 --> 00:00:37.700\nRanger Rick: I wanted to read the book first,\n\n20\n00:00:37.700 --> 00:00:41.000\nRanger Rick: but then I realized there's no book version of Avatar.\n\n21\n00:00:41.000 --> 00:00:43.299\nRanger Rick: What'd you guys do for St. Paddy's Day?\n\n22\n00:00:43.299 --> 00:00:45.000\nRanger Rick: I was wearing this t-shirt that said,\n\n23\n00:00:45.000 --> 00:00:46.299\nRanger Rick: kiss me, I'm Irish,\n\n24\n00:00:46.299 --> 00:00:48.400\nRanger Rick: but no one would kiss me.\n\n25\n00:00:48.400 --> 00:00:49.400\nRanger Rick: So!\n\n26\n00:00:50.599 --> 00:00:54.000\nRanger Rick: You're too important for me until one of your own gets attacked.\n\n27\n00:00:54.099 --> 00:00:58.099\nDaisy Meadows: I just feel like there's more we can do to keep the park safe.\n\n28\n00:00:58.099 --> 00:01:00.500\nRanger Rick: Oh, you think you know how to do my job?\n\n29\n00:01:00.500 --> 00:01:01.900\nRanger Rick: Well, you might not be so confident\n\n30\n00:01:01.900 --> 00:01:04.300\nRanger Rick: once you've walked a mile on my size sevens.\n\n31\n00:01:05.800 --> 00:01:07.099\nDaisy Meadows: Kind of small feet.\n\n32\n00:01:07.099 --> 00:01:09.300\nCliff Rockwell: Actually, seven is the worldwide average.\n\n33\n00:01:09.300 --> 00:01:10.500\nRanger Rick: Boo!\n\n34\n00:01:10.500 --> 00:01:11.300\nReed Marsh: I don't know.\n\n35\n00:01:11.300 --> 00:01:13.300\nReed Marsh: Daisy, I'd rather be back at the office.\n\n36\n00:01:13.300 --> 00:01:15.000\nDaisy Meadows: I know this is painful for you, Reed,\n\n37\n00:01:15.000 --> 00:01:17.000\nDaisy Meadows: but you have to be strong.\n\n38\n00:01:18.300 --> 00:01:19.800\nRanger Rick: You guys ready?\n\n39\n00:01:20.599 --> 00:01:22.000\nDaisy Meadows: Oh, boy, yeah.\n\n40\n00:01:22.000 --> 00:01:23.599\nDaisy Meadows: Okay, we're ready.\n\n41\n00:01:23.599 --> 00:01:26.400\nRanger Rick: I'm gonna show you guys all the problems we've been facing.\n\n42\n00:01:26.400 --> 00:01:28.599\nRanger Rick: I'm gonna show you that we've been doing everything we can.\n\n43\n00:01:28.599 --> 00:01:30.599\nDaisy Meadows: I'm looking forward to working together, Reed.\n\n44\n00:01:30.599 --> 00:01:33.599\nRanger Rick: And after that, I'm gonna show you this log I found.\n\n45\n00:01:33.599 --> 00:01:35.599\nRanger Rick: It's got, like, 50 worms on it.\n\n46\n00:01:36.599 --> 00:01:38.599\nRanger Rick: I call it Worm Log.\n\n47\n00:01:40.000 --> 00:01:42.199\nRanger Rick: Yeah, I've always been a bit of an outdoorsman.\n\n48\n00:01:42.199 --> 00:01:43.199\nRanger Rick: Uh, when I was a kid,\n\n49\n00:01:43.199 --> 00:01:45.500\nRanger Rick: my parents used to make me hang out in the backyard a lot\n\n50\n00:01:45.500 --> 00:01:48.199\nRanger Rick: and just run around till I got tired.\n\n51\n00:01:48.199 --> 00:01:50.300\nRanger Rick: But if there's any criminals out there watching,\n\n52\n00:01:50.300 --> 00:01:52.300\nRanger Rick: I never get tired.\n\n53\n00:01:52.900 --> 00:01:54.900\nRanger Rick: And ladies, too.\n\n54\n00:01:57.099 --> 00:01:58.500\nCliff Rockwell: This thing is a mess.\n\n55\n00:01:58.500 --> 00:02:00.400\nRanger Rick: We used to have three carts, actually.\n\n56\n00:02:00.400 --> 00:02:03.599\nRanger Rick: The first one got pushed into the creek by some kids.\n\n57\n00:02:03.599 --> 00:02:05.900\nRanger Rick: The second one, raccoons got onto.\n\n58\n00:02:05.900 --> 00:02:07.699\nRanger Rick: There was urine everywhere.\n\n59\n00:02:07.699 --> 00:02:10.100\nRanger Rick: And the third one was recently stolen.\n\n60\n00:02:10.100 --> 00:02:10.899\nCliff Rockwell: What's this one?\n\n61\n00:02:10.899 --> 00:02:13.899\nRanger Rick: This is the second one, the raccoon piss one.\n\n62\n00:02:14.699 --> 00:02:17.899\nRanger Rick: All right, so, we're gonna just head out.\n\n63\n00:02:19.800 --> 00:02:21.600\nRanger Rick: Oh, no.\n\n64\n00:02:21.600 --> 00:02:24.600\nRanger Rick: You know what? I think we got too much weight.\n\n65\n00:02:24.600 --> 00:02:25.600\nDaisy Meadows: Oh.\n\n66\n00:02:25.600 --> 00:02:27.199\nDaisy Meadows: That's Cliff, probably.\n\n67\n00:02:27.199 --> 00:02:28.500\nCliff Rockwell: Are you serious?\n\n68\n00:02:28.500 --> 00:02:30.600\nDaisy Meadows: Cliff, can you get off, please?\n\n69\n00:02:30.600 --> 00:02:33.100\nDaisy Meadows: Just run alongside the cart, okay?\n\n70\n00:02:33.100 --> 00:02:34.600\nRanger Rick: Okay, here we go.\n\n71\n00:02:34.600 --> 00:02:35.800\nDaisy Meadows: Whoa.\n\n72\n00:02:35.800 --> 00:02:38.399\nRanger Rick: So, let me tell you a little bit about the park.\n\n73\n00:02:38.399 --> 00:02:40.199\nRanger Rick: Uh, up here on the left is, uh,\n\n74\n00:02:40.199 --> 00:02:43.100\nRanger Rick: one of our most beautiful grass fields.\n\n75\n00:02:43.100 --> 00:02:45.500\nRanger Rick: Uh, it's primarily grass.\n\n76\n00:02:45.500 --> 00:02:47.000\nRanger Rick: All right, I'm gonna make a hard left here.\n\n77\n00:02:47.000 --> 00:02:49.600\nRanger Rick: Stick with us, Cliff.\n\n78\n00:02:49.600 --> 00:02:51.000\nRanger Rick: Hey, is this looking familiar?\n\n79\n00:02:51.000 --> 00:02:53.600\nReed Marsh: Uh, yeah, it happened right over there.\n\n80\n00:02:53.600 --> 00:02:55.199\nRanger Rick: Oh, yeah.\n\n81\n00:02:55.199 --> 00:02:56.899\nRanger Rick: I'm not surprised.\n\n82\n00:02:56.899 --> 00:02:58.600\nRanger Rick: Take a look at this path.\n\n83\n00:02:58.600 --> 00:03:01.600\nRanger Rick: With budget cuts, we can't afford a single safety light.\n\n84\n00:03:01.600 --> 00:03:03.600\nRanger Rick: There's been 10 assaults already this year.\n\n85\n00:03:03.600 --> 00:03:04.800\nDaisy Meadows: Wow, really?\n\n86\n00:03:04.800 --> 00:03:06.699\nDaisy Meadows: Can't you station a park ranger out here?\n\n87\n00:03:06.699 --> 00:03:09.500\nRanger Rick: We have. Who do you think they're assaulting?\n\n88\n00:03:09.500 --> 00:03:12.000\nRanger Rick: I'm sorry, I didn't mean to yell.\n\n89\n00:03:12.000 --> 00:03:13.800\nDaisy Meadows: One way or another, I'm gonna get money\n\n90\n00:03:13.800 --> 00:03:16.199\nDaisy Meadows: so you can protect Reed and all the other\n\n91\n00:03:16.199 --> 00:03:18.800\nDaisy Meadows: helpless, pathetic people in this town.\n\n92\n00:03:19.600 --> 00:03:21.199\nCliff Rockwell: Oh.\n\n93\n00:03:21.199 --> 00:03:22.800\nCliff Rockwell: You guys gotta slow down.\n\n94\n00:03:22.800 --> 00:03:24.000\nCliff Rockwell: You guys taking a rest for a minute?\n\n95\n00:03:24.000 --> 00:03:25.399\nDaisy Meadows: No, Cliff, sorry, no can do.\n\n96\n00:03:25.399 --> 00:03:27.000\nDaisy Meadows: Sun's going down. It's real dangerous out here.\n\n97\n00:03:27.000 --> 00:03:28.000\nDaisy Meadows: Let's roll, Reed.\n\n98\n00:03:28.000 --> 00:03:29.600\nReed Marsh: Okay, going fast.\n\n","size":65335581,"duration":233.012,"max_width":1920,"max_height":1080,"summary_sections":[{"section":"summary","response":"

The team met with park rangers to discuss park safety issues. Ranger Rick highlighted recent security challenges and resource limitations. Daisy Meadows committed to securing funds for improved safety measures.

"},{"section":"agenda","response":"

Meeting with Park Rangers

  • Daisy emphasized the importance of meeting with park rangers.

  • Cliff introduced Reed as the head of outdoor security.

  • Daisy expressed a desire to improve park safety.

Park Safety Concerns

  • Daisy and Ranger Rick discussed the need for better park safety measures.

  • Ranger Rick highlighted issues like lack of safety lights due to budget cuts.

  • Daisy committed to securing funds for better protection.

Tour of the Park

  • Ranger Rick led a tour, pointing out key areas and issues.

  • The team observed the park's condition and discussed safety challenges.

  • Reed and Daisy noted specific problem areas during the tour.

Equipment and Resources

  • Ranger Rick mentioned the loss and damage of park carts.

  • The team discussed the impact of limited resources on park safety.

  • Daisy and Cliff acknowledged the need for better equipment.

"},{"section":"next_steps","response":"
  • @Daisy Meadows will secure funding to enhance park safety.

  • @Ranger Rick will show the team the current problems and safety issues in the park.

  • @Daisy Meadows will coordinate with @Reed Marsh to improve park security measures.

  • @Cliff Rockwell will run alongside the cart during the park tour.

  • @Ranger Rick will provide a detailed tour of the park's problem areas.

"}]}]}] \ No newline at end of file diff --git a/moon/api/lib/demo_orgs/data/notes.json b/moon/api/lib/demo_orgs/data/notes.json index 206dc39ed..f487f7a2c 100644 --- a/moon/api/lib/demo_orgs/data/notes.json +++ b/moon/api/lib/demo_orgs/data/notes.json @@ -1 +1 @@ -[{"title":"2024 Park Plan","description_html":"

Welcome to the collaborative document for the 2024 Park Plan! This document is intended to outline\r\n our strategies, initiatives, and milestones for the upcoming year.

\r\n

Table of Contents

\r\n
    \r\n
  1. \r\n

    Introduction

    \r\n
  2. \r\n
  3. \r\n

    Key Objectives

    \r\n
  4. \r\n
  5. \r\n

    Project Proposals

    \r\n
  6. \r\n
  7. \r\n

    Budget Overview

    \r\n
  8. \r\n
  9. \r\n

    Timeline

    \r\n
  10. \r\n
\r\n
\r\n
\r\n
\r\n

Introduction

\r\n

Frontier Park is dedicated to preserving natural beauty and providing an exceptional experience to all\r\n visitors. As we move into 2024, we must focus on sustainability and innovation.

\r\n

Our Mission

\r\n
\r\n

To protect the park's natural resources while fostering an environment that allows visitors to enjoy and learn\r\n from the wilderness.

\r\n
\r\n

Vision for 2024

\r\n

Our vision is to make Frontier Park a model for conservation and visitor engagement, setting a benchmark for parks\r\n nationwide.

\r\n

Key Objectives

\r\n
    \r\n
  • \r\n

    Sustainability: Implement eco-friendly practices park-wide.

    \r\n
  • \r\n
  • \r\n

    Education: Enhance visitor knowledge and appreciation of the natural world.

    \r\n
  • \r\n
  • \r\n

    Community Engagement: Strengthen relationships with local communities and stakeholders.

    \r\n
  • \r\n
  • \r\n

    Safety & Infrastructure: Ensure a safe and accessible environment for all.

    \r\n
  • \r\n
\r\n

Project Proposals

\r\n
    \r\n
  • \r\n

    Eco-Lodges: Sustainable accommodation for visitors.

    \r\n
      \r\n
    • \r\n

      Restrooms

      \r\n
    • \r\n
    • \r\n

      Campsites

      \r\n
    • \r\n
    • \r\n

      Overnight accommodations

      \r\n
    • \r\n
    \r\n
  • \r\n
  • \r\n

    Interactive Exhibits: Using technology to educate visitors about wildlife.

    \r\n
  • \r\n
\r\n

Budget Overview

\r\n

Here is a brief overview of the proposed budget:

\r\n
    \r\n
  • \r\n

    Operations: $500,000

    \r\n
  • \r\n
  • \r\n

    Conservation Projects: $350,000

    \r\n
  • \r\n
  • \r\n

    Marketing & Outreach: $150,000

    \r\n
  • \r\n
  • \r\n

    Facility Upgrades: $200,000 $100,000

    \r\n
  • \r\n
\r\n

Timeline

\r\n
\r\n Q1: Research and Development\r\n
\r\n

In the first quarter of the year, the focus will be on conducting surveys to gather visitor feedback, analyzing\r\n biodiversity data, and exploring innovative ways to enhance visitor experiences. Additionally, research will be\r\n carried out to identify potential conservation initiatives and sustainability projects for the park.

\r\n
\r\n
\r\n
\r\n Q2: Implementation of Pilot Programs\r\n
\r\n

During the second quarter, pilot programs will be implemented to test new visitor engagement activities,\r\n conservation practices, and sustainable infrastructure initiatives within the park.

\r\n

These pilot programs aim to assess their feasibility, effectiveness, and impact on enhancing the overall visitor\r\n experience and environmental conservation efforts.

\r\n
\r\n
\r\n
\r\n Q3: Review & Adjustments\r\n
\r\n

In the third quarter, a comprehensive review of the pilot programs will be conducted to" evaluate their\r\n outcomes, gather stakeholder feedback, and assess any necessary adjustments for optimization.

\r\n

This phase involves:

\r\n
    \r\n
  • \r\n

    Analyzing data

    \r\n
  • \r\n
  • \r\n

    Identifying strengths and areas for improvement

    \r\n
  • \r\n
  • \r\n

    Making strategic adjustments to ensure the success and sustainability of the initiatives.

    \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n Q4: Full-Scale Rollout\r\n
\r\n

During the fourth quarter, the full-scale rollout of successful pilot programs and initiatives will take place\r\n across the park. This phase involves expanding and implementing the refined strategies, integrating feedback from\r\n the review phase, and ensuring seamless execution of planned activities to maximize visitor engagement,\r\n conservation efforts, and sustainable practices park-wide.

\r\n
\r\n
\r\n

Communication Guidelines

\r\n

Please adhere to the following when posting in our Frontier Park Spaces:

\r\n
    \r\n
  • \r\n

    Be respectful and constructive.

    \r\n
  • \r\n
  • \r\n

    Use proper grammar and punctuation.

    \r\n
  • \r\n
  • \r\n

    Stay on topic in each Space.

    \r\n
  • \r\n
\r\n

Updates & Progress

\r\n
    \r\n
  • \r\n

    Visitor Center Renovation: In progress, on track for Q2 completion.

    \r\n
  • \r\n
  • \r\n

    New Trails Campaign: Starting in April Now starting in May.

    \r\n
  • \r\n
\r\n

Technical Notes

\r\n

For those working on the new mobile app, here's a snippet of the code to integrate the park map:

\r\n
const mapOptions = {\\n  center: { lat: 44.58, lng: -110.5 },\\n  zoom: 8,\\n};\\n\\nfunction initMap() {\\n  const parkMap = new google.maps.Map(document.getElementById('map'), mapOptions);\\n}
\r\n

This code block initializes the map with predefined mapOptions.

\r\n
\r\n
\r\n
\r\n

Let's work together to make 2024 a milestone year for Frontier Park! 🌲

","public_visibility":false,"project":"General","project_permission":"view","member":"Ranger Rick","description_schema_version":4}] \ No newline at end of file +[{"title":"2024 Park Plan","description_html":"

Welcome to the collaborative document for the 2024 Park Plan! This document is intended to outline\n our strategies, initiatives, and milestones for the upcoming year.

\n

Table of Contents

\n
    \n
  1. \n

    Introduction

    \n
  2. \n
  3. \n

    Key Objectives

    \n
  4. \n
  5. \n

    Project Proposals

    \n
  6. \n
  7. \n

    Budget Overview

    \n
  8. \n
  9. \n

    Timeline

    \n
  10. \n
\n
\n
\n
\n

Introduction

\n

Frontier Park is dedicated to preserving natural beauty and providing an exceptional experience to all\n visitors. As we move into 2024, we must focus on sustainability and innovation.

\n

Our Mission

\n
\n

To protect the park's natural resources while fostering an environment that allows visitors to enjoy and learn\n from the wilderness.

\n
\n

Vision for 2024

\n

Our vision is to make Frontier Park a model for conservation and visitor engagement, setting a benchmark for parks\n nationwide.

\n

Key Objectives

\n
    \n
  • \n

    Sustainability: Implement eco-friendly practices park-wide.

    \n
  • \n
  • \n

    Education: Enhance visitor knowledge and appreciation of the natural world.

    \n
  • \n
  • \n

    Community Engagement: Strengthen relationships with local communities and stakeholders.

    \n
  • \n
  • \n

    Safety & Infrastructure: Ensure a safe and accessible environment for all.

    \n
  • \n
\n

Project Proposals

\n
    \n
  • \n

    Eco-Lodges: Sustainable accommodation for visitors.

    \n
      \n
    • \n

      Restrooms

      \n
    • \n
    • \n

      Campsites

      \n
    • \n
    • \n

      Overnight accommodations

      \n
    • \n
    \n
  • \n
  • \n

    Interactive Exhibits: Using technology to educate visitors about wildlife.

    \n
  • \n
\n

Budget Overview

\n

Here is a brief overview of the proposed budget:

\n
    \n
  • \n

    Operations: $500,000

    \n
  • \n
  • \n

    Conservation Projects: $350,000

    \n
  • \n
  • \n

    Marketing & Outreach: $150,000

    \n
  • \n
  • \n

    Facility Upgrades: $200,000 $100,000

    \n
  • \n
\n

Timeline

\n
\n Q1: Research and Development\n
\n

In the first quarter of the year, the focus will be on conducting surveys to gather visitor feedback, analyzing\n biodiversity data, and exploring innovative ways to enhance visitor experiences. Additionally, research will be\n carried out to identify potential conservation initiatives and sustainability projects for the park.

\n
\n
\n
\n Q2: Implementation of Pilot Programs\n
\n

During the second quarter, pilot programs will be implemented to test new visitor engagement activities,\n conservation practices, and sustainable infrastructure initiatives within the park.

\n

These pilot programs aim to assess their feasibility, effectiveness, and impact on enhancing the overall visitor\n experience and environmental conservation efforts.

\n
\n
\n
\n Q3: Review & Adjustments\n
\n

In the third quarter, a comprehensive review of the pilot programs will be conducted to" evaluate their\n outcomes, gather stakeholder feedback, and assess any necessary adjustments for optimization.

\n

This phase involves:

\n
    \n
  • \n

    Analyzing data

    \n
  • \n
  • \n

    Identifying strengths and areas for improvement

    \n
  • \n
  • \n

    Making strategic adjustments to ensure the success and sustainability of the initiatives.

    \n
  • \n
\n
\n
\n
\n Q4: Full-Scale Rollout\n
\n

During the fourth quarter, the full-scale rollout of successful pilot programs and initiatives will take place\n across the park. This phase involves expanding and implementing the refined strategies, integrating feedback from\n the review phase, and ensuring seamless execution of planned activities to maximize visitor engagement,\n conservation efforts, and sustainable practices park-wide.

\n
\n
\n

Communication Guidelines

\n

Please adhere to the following when posting in our Frontier Park Spaces:

\n
    \n
  • \n

    Be respectful and constructive.

    \n
  • \n
  • \n

    Use proper grammar and punctuation.

    \n
  • \n
  • \n

    Stay on topic in each Space.

    \n
  • \n
\n

Updates & Progress

\n
    \n
  • \n

    Visitor Center Renovation: In progress, on track for Q2 completion.

    \n
  • \n
  • \n

    New Trails Campaign: Starting in April Now starting in May.

    \n
  • \n
\n

Technical Notes

\n

For those working on the new mobile app, here's a snippet of the code to integrate the park map:

\n
const mapOptions = {\\n  center: { lat: 44.58, lng: -110.5 },\\n  zoom: 8,\\n};\\n\\nfunction initMap() {\\n  const parkMap = new google.maps.Map(document.getElementById('map'), mapOptions);\\n}
\n

This code block initializes the map with predefined mapOptions.

\n
\n
\n
\n

Let's work together to make 2024 a milestone year for Frontier Park! 🌲

","public_visibility":false,"project":"General","project_permission":"view","member":"Ranger Rick","description_schema_version":4}] \ No newline at end of file diff --git a/moon/apps/web/hooks/issues/useDeleteIssueComment.ts b/moon/apps/web/hooks/issues/useDeleteIssueComment.ts index f328ce383..87fb37291 100644 --- a/moon/apps/web/hooks/issues/useDeleteIssueComment.ts +++ b/moon/apps/web/hooks/issues/useDeleteIssueComment.ts @@ -1,4 +1,4 @@ -import { DeleteApiIssueCommentDeleteData, RequestParams } from '@gitmono/types/generated' +import { DeleteApiConversationByCommentIdData, RequestParams } from '@gitmono/types/generated' import { useMutation, useQueryClient } from '@tanstack/react-query' import { legacyApiClient } from '@/utils/queryClient' @@ -6,9 +6,9 @@ import { legacyApiClient } from '@/utils/queryClient' export function useDeleteIssueComment(id: string, params?: RequestParams) { const queryClient = useQueryClient() - return useMutation({ - mutationKey: legacyApiClient.v1.deleteApiIssueCommentDelete().baseKey, - mutationFn: (convId) => legacyApiClient.v1.deleteApiIssueCommentDelete().request(convId, params), + return useMutation({ + mutationKey: legacyApiClient.v1.deleteApiConversationByCommentId().baseKey, + mutationFn: (convId) => legacyApiClient.v1.deleteApiConversationByCommentId().request(convId, params), onSuccess: () => { queryClient.invalidateQueries({ queryKey: legacyApiClient.v1.getApiIssueDetail().requestKey(id) diff --git a/moon/apps/web/hooks/issues/usePostIssueComment.ts b/moon/apps/web/hooks/issues/usePostIssueComment.ts index eb5d43090..4a9b2ef65 100644 --- a/moon/apps/web/hooks/issues/usePostIssueComment.ts +++ b/moon/apps/web/hooks/issues/usePostIssueComment.ts @@ -1,4 +1,4 @@ -import { PostApiIssueCommentData, RequestParams, SaveCommentRequest } from '@gitmono/types/generated' +import { PostApiIssueCommentData, RequestParams, ContentPayload } from '@gitmono/types/generated' import { useMutation } from '@tanstack/react-query' import { legacyApiClient } from '@/utils/queryClient' @@ -7,7 +7,7 @@ export function usePostIssueComment() { return useMutation< PostApiIssueCommentData, Error, - { link: string; data: SaveCommentRequest; params?: RequestParams } + { link: string; data: ContentPayload; params?: RequestParams } >({ mutationFn: ({ link, data, params }) => legacyApiClient.v1.postApiIssueComment().request(link, data, params) }) diff --git a/moon/apps/web/hooks/useDeleteMrCommentDelete.ts b/moon/apps/web/hooks/useDeleteMrCommentDelete.ts index 6642db5e4..0b0f03e30 100644 --- a/moon/apps/web/hooks/useDeleteMrCommentDelete.ts +++ b/moon/apps/web/hooks/useDeleteMrCommentDelete.ts @@ -1,14 +1,14 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { legacyApiClient } from '@/utils/queryClient' -import type { DeleteApiMrCommentDeleteData, RequestParams } from '@gitmono/types' +import type { DeleteApiConversationByCommentIdData, RequestParams } from '@gitmono/types' export function useDeleteMrCommentDelete(id: string, params?: RequestParams) { const queryClient = useQueryClient() - return useMutation({ - mutationKey: legacyApiClient.v1.deleteApiMrCommentDelete().baseKey, + return useMutation({ + mutationKey: legacyApiClient.v1.deleteApiConversationByCommentId().baseKey, mutationFn: (convId) => - legacyApiClient.v1.deleteApiMrCommentDelete().request(convId, params), + legacyApiClient.v1.deleteApiConversationByCommentId().request(convId, params), onSuccess: (_data, _convId) => { queryClient.invalidateQueries({ queryKey: legacyApiClient.v1.getApiMrDetail().requestKey(id), diff --git a/moon/apps/web/hooks/usePostMrComment.ts b/moon/apps/web/hooks/usePostMrComment.ts index 55d56727c..ba813a451 100644 --- a/moon/apps/web/hooks/usePostMrComment.ts +++ b/moon/apps/web/hooks/usePostMrComment.ts @@ -1,11 +1,11 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { legacyApiClient } from '@/utils/queryClient' -import type { SaveCommentRequest, PostApiMrCommentData, RequestParams } from '@gitmono/types' +import type { ContentPayload, PostApiMrCommentData, RequestParams } from '@gitmono/types' export function usePostMrComment(link: string, params?: RequestParams) { const queryClient = useQueryClient() - return useMutation({ + return useMutation({ mutationKey: legacyApiClient.v1.postApiMrComment().requestKey(link), mutationFn: (data) => legacyApiClient.v1.postApiMrComment().request(link, data, params), diff --git a/moon/packages/types/generated.ts b/moon/packages/types/generated.ts index cbaf6def2..374176cd2 100644 --- a/moon/packages/types/generated.ts +++ b/moon/packages/types/generated.ts @@ -3189,6 +3189,10 @@ export type CommonResultBool = { req_result: boolean } +export type ContentPayload = { + content: string +} + export enum ConvTypeEnum { Comment = 'Comment', Deploy = 'Deploy', @@ -3393,10 +3397,6 @@ export type ReactionRequest = { content: string } -export type SaveCommentRequest = { - content: string -} - export type TreeBriefItem = { content_type: string name: string @@ -4568,14 +4568,16 @@ export type GetApiBlobData = CommonResultString export type DeleteApiConversationReactionsByIdData = CommonResultString +export type PostApiConversationByCommentIdData = CommonResultString + +export type DeleteApiConversationByCommentIdData = CommonResultString + export type PostApiConversationReactionsData = CommonResultString export type PostApiCreateFileData = CommonResultString export type PostApiIssueAssigneesData = CommonResultString -export type DeleteApiIssueCommentDeleteData = CommonResultString - export type PostApiIssueLabelsData = CommonResultString export type PostApiIssueListData = CommonResultCommonPageItemRes @@ -4590,6 +4592,8 @@ export type GetApiIssueDetailData = CommonResultIssueDetailRes export type PostApiIssueReopenData = CommonResultString +export type PostApiIssueTitleData = CommonResultString + export type PostApiLabelListData = CommonResultCommonPageLabelItem export type PostApiLabelNewData = CommonResultString @@ -4603,8 +4607,6 @@ export type GetApiLatestCommitData = LatestCommitInfo export type PostApiMrAssigneesData = CommonResultString -export type DeleteApiMrCommentDeleteData = CommonResultString - export type PostApiMrLabelsData = CommonResultString export type PostApiMrListData = CommonResultCommonPageItemRes @@ -4623,6 +4625,8 @@ export type PostApiMrMergeData = CommonResultString export type PostApiMrReopenData = CommonResultString +export type PostApiMrTitleData = CommonResultString + export type GetApiStatusData = string export type GetApiTreeParams = { @@ -12985,6 +12989,54 @@ export class Api extends HttpClient { + const base = 'POST:/api/v1/conversation/{comment_id}' as const + + return { + baseKey: dataTaggedQueryKey([base]), + requestKey: (commentId: number) => dataTaggedQueryKey([base, commentId]), + request: (commentId: number, data: ContentPayload, params: RequestParams = {}) => + this.request({ + path: `/api/v1/conversation/${commentId}`, + method: 'POST', + body: data, + type: ContentType.Json, + ...params + }) + } + }, + + /** + * No description + * + * @tags conversation + * @name DeleteApiConversationByCommentId + * @summary Delete Comment + * @request DELETE:/api/v1/conversation/{comment_id} + */ + deleteApiConversationByCommentId: () => { + const base = 'DELETE:/api/v1/conversation/{comment_id}' as const + + return { + baseKey: dataTaggedQueryKey([base]), + requestKey: (commentId: number) => dataTaggedQueryKey([base, commentId]), + request: (commentId: number, params: RequestParams = {}) => + this.request({ + path: `/api/v1/conversation/${commentId}`, + method: 'DELETE', + ...params + }) + } + }, + /** * No description * @@ -13060,29 +13112,6 @@ export class Api extends HttpClient { - const base = 'DELETE:/api/v1/issue/comment/{id}/delete' as const - - return { - baseKey: dataTaggedQueryKey([base]), - requestKey: (id: number) => dataTaggedQueryKey([base, id]), - request: (id: number, params: RequestParams = {}) => - this.request({ - path: `/api/v1/issue/comment/${id}/delete`, - method: 'DELETE', - ...params - }) - } - }, - /** * No description * @@ -13195,7 +13224,7 @@ export class Api extends HttpClient([base]), requestKey: (link: string) => dataTaggedQueryKey([base, link]), - request: (link: string, data: SaveCommentRequest, params: RequestParams = {}) => + request: (link: string, data: ContentPayload, params: RequestParams = {}) => this.request({ path: `/api/v1/issue/${link}/comment`, method: 'POST', @@ -13252,6 +13281,31 @@ export class Api extends HttpClient { + const base = 'POST:/api/v1/issue/{link}/title' as const + + return { + baseKey: dataTaggedQueryKey([base]), + requestKey: (link: string) => dataTaggedQueryKey([base, link]), + request: (link: string, data: ContentPayload, params: RequestParams = {}) => + this.request({ + path: `/api/v1/issue/${link}/title`, + method: 'POST', + body: data, + type: ContentType.Json, + ...params + }) + } + }, + /** * No description * @@ -13351,29 +13405,6 @@ export class Api extends HttpClient { - const base = 'DELETE:/api/v1/mr/comment/{conv_id}/delete' as const - - return { - baseKey: dataTaggedQueryKey([base]), - requestKey: (convId: number) => dataTaggedQueryKey([base, convId]), - request: (convId: number, params: RequestParams = {}) => - this.request({ - path: `/api/v1/mr/comment/${convId}/delete`, - method: 'DELETE', - ...params - }) - } - }, - /** * No description * @@ -13461,7 +13492,7 @@ export class Api extends HttpClient([base]), requestKey: (link: string) => dataTaggedQueryKey([base, link]), - request: (link: string, data: SaveCommentRequest, params: RequestParams = {}) => + request: (link: string, data: ContentPayload, params: RequestParams = {}) => this.request({ path: `/api/v1/mr/${link}/comment`, method: 'POST', @@ -13587,6 +13618,31 @@ export class Api extends HttpClient { + const base = 'POST:/api/v1/mr/{link}/title' as const + + return { + baseKey: dataTaggedQueryKey([base]), + requestKey: (link: string) => dataTaggedQueryKey([base, link]), + request: (link: string, data: ContentPayload, params: RequestParams = {}) => + this.request({ + path: `/api/v1/mr/${link}/title`, + method: 'POST', + body: data, + type: ContentType.Json, + ...params + }) + } + }, + /** * No description *