medusa-contact-us 0.0.21 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,6 +4,7 @@ import { defineRouteConfig } from "@medusajs/admin-sdk";
4
4
  import { Container, Heading, Text, Button, Input, Badge, Textarea } from "@medusajs/ui";
5
5
  import { Envelope, ChatBubbleLeftRight, ArrowLeft } from "@medusajs/icons";
6
6
  import { useNavigate, useParams } from "react-router-dom";
7
+ import "@medusajs/admin-shared";
7
8
  const useDebounce$1 = (value, delay) => {
8
9
  const [debouncedValue, setDebouncedValue] = useState(value);
9
10
  useEffect(() => {
@@ -335,6 +336,7 @@ const ContactRequestsPage = () => {
335
336
  /* @__PURE__ */ jsx("thead", { className: "bg-ui-bg-subtle", children: /* @__PURE__ */ jsxs("tr", { children: [
336
337
  /* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Email" }),
337
338
  /* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Status" }),
339
+ /* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Assigned To" }),
338
340
  /* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Source" }),
339
341
  /* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Created" }),
340
342
  /* @__PURE__ */ jsx("th", { className: "px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-ui-fg-muted", children: "Actions" })
@@ -357,6 +359,7 @@ const ContactRequestsPage = () => {
357
359
  children: request.status.replace("_", " ")
358
360
  }
359
361
  ) }),
362
+ /* @__PURE__ */ jsx("td", { className: "px-4 py-4 text-ui-fg-subtle", children: request.assign_to ? /* @__PURE__ */ jsx(Badge, { size: "2xsmall", children: request.assign_to }) : /* @__PURE__ */ jsx("span", { children: "—" }) }),
360
363
  /* @__PURE__ */ jsx("td", { className: "px-4 py-4 text-ui-fg-subtle", children: request.source ?? "storefront" }),
361
364
  /* @__PURE__ */ jsx("td", { className: "px-4 py-4 text-ui-fg-subtle", children: new Date(request.created_at).toLocaleString() }),
362
365
  /* @__PURE__ */ jsx("td", { className: "px-4 py-4", children: /* @__PURE__ */ jsx(
@@ -411,6 +414,7 @@ const ContactRequestDetailPage = () => {
411
414
  const navigate = useNavigate();
412
415
  const { id } = useParams();
413
416
  const [request, setRequest] = useState(null);
417
+ const [comments, setComments] = useState([]);
414
418
  const [nextAllowedStatuses, setNextAllowedStatuses] = useState([]);
415
419
  const [selectedStatus, setSelectedStatus] = useState("");
416
420
  const [isLoading, setIsLoading] = useState(true);
@@ -418,6 +422,15 @@ const ContactRequestDetailPage = () => {
418
422
  const [error, setError] = useState(null);
419
423
  const [updateError, setUpdateError] = useState(null);
420
424
  const [updateSuccess, setUpdateSuccess] = useState(false);
425
+ const [selectedAssignTo, setSelectedAssignTo] = useState("");
426
+ const [isAssigning, setIsAssigning] = useState(false);
427
+ const [assignError, setAssignError] = useState(null);
428
+ const [assignSuccess, setAssignSuccess] = useState(false);
429
+ const [commentText, setCommentText] = useState("");
430
+ const [commentImages, setCommentImages] = useState([]);
431
+ const [isCreatingComment, setIsCreatingComment] = useState(false);
432
+ const [commentError, setCommentError] = useState(null);
433
+ const [commentSuccess, setCommentSuccess] = useState(false);
421
434
  useEffect(() => {
422
435
  if (!id) {
423
436
  navigate("/contact-requests");
@@ -436,8 +449,10 @@ const ContactRequestDetailPage = () => {
436
449
  }
437
450
  const payload = await response.json();
438
451
  setRequest(payload.request);
452
+ setComments(payload.comments ?? []);
439
453
  setNextAllowedStatuses(payload.next_allowed_statuses ?? []);
440
454
  setSelectedStatus("");
455
+ setSelectedAssignTo("");
441
456
  } catch (loadError) {
442
457
  const message = loadError instanceof Error ? loadError.message : "Unable to load contact request";
443
458
  setError(message);
@@ -477,6 +492,8 @@ const ContactRequestDetailPage = () => {
477
492
  });
478
493
  if (detailResponse.ok) {
479
494
  const detailPayload = await detailResponse.json();
495
+ setRequest(detailPayload.request);
496
+ setComments(detailPayload.comments ?? []);
480
497
  setNextAllowedStatuses(detailPayload.next_allowed_statuses ?? []);
481
498
  }
482
499
  } catch (updateErr) {
@@ -486,6 +503,144 @@ const ContactRequestDetailPage = () => {
486
503
  setIsUpdating(false);
487
504
  }
488
505
  };
506
+ const handleAssign = async () => {
507
+ if (!id) {
508
+ return;
509
+ }
510
+ try {
511
+ setIsAssigning(true);
512
+ setAssignError(null);
513
+ setAssignSuccess(false);
514
+ const response = await fetch(`/admin/contact-requests/${id}/assign`, {
515
+ method: "POST",
516
+ headers: {
517
+ "Content-Type": "application/json"
518
+ },
519
+ credentials: "include",
520
+ body: JSON.stringify({
521
+ assign_to: selectedAssignTo.trim() || null
522
+ })
523
+ });
524
+ if (!response.ok) {
525
+ const message = await response.text();
526
+ throw new Error(message || "Unable to assign contact request");
527
+ }
528
+ const payload = await response.json();
529
+ setRequest(payload.request);
530
+ setSelectedAssignTo("");
531
+ setAssignSuccess(true);
532
+ setTimeout(() => setAssignSuccess(false), 3e3);
533
+ const detailResponse = await fetch(`/admin/contact-requests/${id}`, {
534
+ credentials: "include"
535
+ });
536
+ if (detailResponse.ok) {
537
+ const detailPayload = await detailResponse.json();
538
+ setRequest(detailPayload.request);
539
+ setComments(detailPayload.comments ?? []);
540
+ setNextAllowedStatuses(detailPayload.next_allowed_statuses ?? []);
541
+ }
542
+ } catch (assignErr) {
543
+ const message = assignErr instanceof Error ? assignErr.message : "Unable to assign contact request";
544
+ setAssignError(message);
545
+ } finally {
546
+ setIsAssigning(false);
547
+ }
548
+ };
549
+ const handleUnassign = async () => {
550
+ if (!id) {
551
+ return;
552
+ }
553
+ try {
554
+ setIsAssigning(true);
555
+ setAssignError(null);
556
+ setAssignSuccess(false);
557
+ const response = await fetch(`/admin/contact-requests/${id}/assign`, {
558
+ method: "POST",
559
+ headers: {
560
+ "Content-Type": "application/json"
561
+ },
562
+ credentials: "include",
563
+ body: JSON.stringify({
564
+ assign_to: null
565
+ })
566
+ });
567
+ if (!response.ok) {
568
+ const message = await response.text();
569
+ throw new Error(message || "Unable to unassign contact request");
570
+ }
571
+ const payload = await response.json();
572
+ setRequest(payload.request);
573
+ setAssignSuccess(true);
574
+ setTimeout(() => setAssignSuccess(false), 3e3);
575
+ const detailResponse = await fetch(`/admin/contact-requests/${id}`, {
576
+ credentials: "include"
577
+ });
578
+ if (detailResponse.ok) {
579
+ const detailPayload = await detailResponse.json();
580
+ setRequest(detailPayload.request);
581
+ setComments(detailPayload.comments ?? []);
582
+ setNextAllowedStatuses(detailPayload.next_allowed_statuses ?? []);
583
+ }
584
+ } catch (assignErr) {
585
+ const message = assignErr instanceof Error ? assignErr.message : "Unable to unassign contact request";
586
+ setAssignError(message);
587
+ } finally {
588
+ setIsAssigning(false);
589
+ }
590
+ };
591
+ const handleCreateComment = async () => {
592
+ if (!id || !commentText.trim() && commentImages.length === 0) {
593
+ setCommentError("Please provide a comment or at least one image");
594
+ return;
595
+ }
596
+ try {
597
+ setIsCreatingComment(true);
598
+ setCommentError(null);
599
+ setCommentSuccess(false);
600
+ const response = await fetch(`/admin/contact-requests/${id}/comments`, {
601
+ method: "POST",
602
+ headers: {
603
+ "Content-Type": "application/json"
604
+ },
605
+ credentials: "include",
606
+ body: JSON.stringify({
607
+ comment: commentText.trim() || void 0,
608
+ images: commentImages.filter((img) => img.trim()).length > 0 ? commentImages.filter((img) => img.trim()) : void 0
609
+ })
610
+ });
611
+ if (!response.ok) {
612
+ const message = await response.text();
613
+ throw new Error(message || "Unable to create comment");
614
+ }
615
+ const detailResponse = await fetch(`/admin/contact-requests/${id}`, {
616
+ credentials: "include"
617
+ });
618
+ if (detailResponse.ok) {
619
+ const detailPayload = await detailResponse.json();
620
+ setComments(detailPayload.comments ?? []);
621
+ }
622
+ setCommentText("");
623
+ setCommentImages([]);
624
+ setCommentSuccess(true);
625
+ setTimeout(() => setCommentSuccess(false), 3e3);
626
+ } catch (commentErr) {
627
+ const message = commentErr instanceof Error ? commentErr.message : "Unable to create comment";
628
+ setCommentError(message);
629
+ } finally {
630
+ setIsCreatingComment(false);
631
+ }
632
+ };
633
+ const addImageInput = () => {
634
+ setCommentImages([...commentImages, ""]);
635
+ };
636
+ const removeImageInput = (index) => {
637
+ setCommentImages(commentImages.filter((_, i) => i !== index));
638
+ };
639
+ const updateImageUrl = (index, value) => {
640
+ const updated = [...commentImages];
641
+ updated[index] = value;
642
+ setCommentImages(updated);
643
+ };
489
644
  if (isLoading) {
490
645
  return /* @__PURE__ */ jsx("div", { className: "w-full p-6", children: /* @__PURE__ */ jsx(Container, { className: "mx-auto flex w-full max-w-5xl flex-col gap-6 p-6", children: /* @__PURE__ */ jsx("div", { className: "flex justify-center py-16", children: /* @__PURE__ */ jsx(Text, { children: "Loading contact request..." }) }) }) });
491
646
  }
@@ -557,6 +712,54 @@ const ContactRequestDetailPage = () => {
557
712
  updateError && /* @__PURE__ */ jsx(Text, { size: "small", className: "mt-2 text-ui-fg-error", children: updateError }),
558
713
  updateSuccess && /* @__PURE__ */ jsx(Text, { size: "small", className: "mt-2 text-ui-fg-success", children: "Status updated successfully" })
559
714
  ] }),
715
+ /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-ui-border-base bg-ui-bg-base p-6", children: [
716
+ /* @__PURE__ */ jsx(Heading, { level: "h2", className: "mb-4 text-lg", children: "Assignment" }),
717
+ /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
718
+ /* @__PURE__ */ jsxs("div", { children: [
719
+ /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Currently Assigned To" }),
720
+ /* @__PURE__ */ jsx(Text, { className: "font-medium", children: request.assign_to ? /* @__PURE__ */ jsx(Badge, { size: "small", className: "mt-1", children: request.assign_to }) : /* @__PURE__ */ jsx("span", { className: "text-ui-fg-subtle", children: "Unassigned" }) })
721
+ ] }),
722
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 md:flex-row md:items-end", children: [
723
+ /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
724
+ /* @__PURE__ */ jsx("label", { className: "mb-2 block text-sm font-medium text-ui-fg-base", children: "Admin User ID" }),
725
+ /* @__PURE__ */ jsx(
726
+ Input,
727
+ {
728
+ type: "text",
729
+ value: selectedAssignTo,
730
+ onChange: (event) => setSelectedAssignTo(event.target.value),
731
+ placeholder: "Enter admin user ID",
732
+ className: "w-full"
733
+ }
734
+ )
735
+ ] }),
736
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
737
+ /* @__PURE__ */ jsx(
738
+ Button,
739
+ {
740
+ variant: "primary",
741
+ onClick: handleAssign,
742
+ disabled: isAssigning,
743
+ isLoading: isAssigning,
744
+ children: "Assign"
745
+ }
746
+ ),
747
+ request.assign_to && /* @__PURE__ */ jsx(
748
+ Button,
749
+ {
750
+ variant: "secondary",
751
+ onClick: handleUnassign,
752
+ disabled: isAssigning,
753
+ isLoading: isAssigning,
754
+ children: "Unassign"
755
+ }
756
+ )
757
+ ] })
758
+ ] }),
759
+ assignError && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-error", children: assignError }),
760
+ assignSuccess && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-success", children: "Assignment updated successfully" })
761
+ ] })
762
+ ] }),
560
763
  /* @__PURE__ */ jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [
561
764
  /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-ui-border-base bg-ui-bg-base p-6", children: [
562
765
  /* @__PURE__ */ jsx(Heading, { level: "h2", className: "mb-4 text-lg", children: "Contact Information" }),
@@ -630,6 +833,103 @@ const ContactRequestDetailPage = () => {
630
833
  /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: key }),
631
834
  /* @__PURE__ */ jsx(Text, { size: "small", className: "font-medium", children: typeof value === "string" ? value : JSON.stringify(value) })
632
835
  ] }, key)) })
836
+ ] }),
837
+ /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-ui-border-base bg-ui-bg-base p-6", children: [
838
+ /* @__PURE__ */ jsx(Heading, { level: "h2", className: "mb-4 text-lg", children: "Comments" }),
839
+ /* @__PURE__ */ jsxs("div", { className: "mb-6 space-y-4 rounded-lg border border-ui-border-subtle bg-ui-bg-subtle p-4", children: [
840
+ /* @__PURE__ */ jsxs("div", { children: [
841
+ /* @__PURE__ */ jsx("label", { className: "mb-2 block text-sm font-medium text-ui-fg-base", children: "Add Comment" }),
842
+ /* @__PURE__ */ jsx(
843
+ Textarea,
844
+ {
845
+ value: commentText,
846
+ onChange: (event) => setCommentText(event.target.value),
847
+ placeholder: "Enter your comment...",
848
+ className: "min-h-[80px]"
849
+ }
850
+ )
851
+ ] }),
852
+ /* @__PURE__ */ jsxs("div", { children: [
853
+ /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
854
+ /* @__PURE__ */ jsx("label", { className: "text-sm font-medium text-ui-fg-base", children: "Images (URLs)" }),
855
+ /* @__PURE__ */ jsx(
856
+ Button,
857
+ {
858
+ variant: "transparent",
859
+ size: "small",
860
+ onClick: addImageInput,
861
+ type: "button",
862
+ children: "Add Image URL"
863
+ }
864
+ )
865
+ ] }),
866
+ commentImages.length > 0 && /* @__PURE__ */ jsx("div", { className: "space-y-2", children: commentImages.map((url, index) => /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
867
+ /* @__PURE__ */ jsx(
868
+ Input,
869
+ {
870
+ type: "text",
871
+ value: url,
872
+ onChange: (event) => updateImageUrl(index, event.target.value),
873
+ placeholder: "https://example.com/image.jpg",
874
+ className: "flex-1"
875
+ }
876
+ ),
877
+ /* @__PURE__ */ jsx(
878
+ Button,
879
+ {
880
+ variant: "transparent",
881
+ size: "small",
882
+ onClick: () => removeImageInput(index),
883
+ type: "button",
884
+ children: "Remove"
885
+ }
886
+ )
887
+ ] }, index)) })
888
+ ] }),
889
+ /* @__PURE__ */ jsx(
890
+ Button,
891
+ {
892
+ variant: "primary",
893
+ onClick: handleCreateComment,
894
+ disabled: isCreatingComment || !commentText.trim() && commentImages.filter((img) => img.trim()).length === 0,
895
+ isLoading: isCreatingComment,
896
+ children: "Add Comment"
897
+ }
898
+ ),
899
+ commentError && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-error", children: commentError }),
900
+ commentSuccess && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-success", children: "Comment added successfully" })
901
+ ] }),
902
+ comments.length > 0 ? /* @__PURE__ */ jsx("div", { className: "space-y-4", children: comments.map((comment) => /* @__PURE__ */ jsxs(
903
+ "div",
904
+ {
905
+ className: "rounded-lg border border-ui-border-subtle bg-ui-bg-subtle p-4",
906
+ children: [
907
+ /* @__PURE__ */ jsx("div", { className: "mb-2 flex items-center justify-between", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
908
+ /* @__PURE__ */ jsx(Badge, { size: "2xsmall", children: comment.admin_id }),
909
+ /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: new Date(comment.created_at).toLocaleString() })
910
+ ] }) }),
911
+ comment.comment && /* @__PURE__ */ jsx(Text, { className: "mb-2 whitespace-pre-wrap", children: comment.comment }),
912
+ comment.images && comment.images.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-3 space-y-2", children: [
913
+ /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "Images:" }),
914
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: comment.images.map((imageUrl, index) => /* @__PURE__ */ jsxs(
915
+ "a",
916
+ {
917
+ href: imageUrl,
918
+ target: "_blank",
919
+ rel: "noopener noreferrer",
920
+ className: "text-sm text-ui-fg-interactive hover:underline",
921
+ children: [
922
+ "Image ",
923
+ index + 1
924
+ ]
925
+ },
926
+ index
927
+ )) })
928
+ ] })
929
+ ]
930
+ },
931
+ comment.id
932
+ )) }) : /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "No comments yet" })
633
933
  ] })
634
934
  ] }) });
635
935
  };
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const zod_1 = require("zod");
6
+ const contact_requests_1 = require("../../../../../modules/contact-requests");
7
+ const validators_1 = require("../../validators");
8
+ const POST = async (req, res) => {
9
+ const { id } = req.params;
10
+ try {
11
+ // Validate input
12
+ const body = validators_1.AdminAssignContactRequestSchema.parse(req.body ?? {});
13
+ const service = req.scope.resolve(contact_requests_1.CONTACT_REQUEST_MODULE);
14
+ const request = await service.assignRequest({
15
+ id,
16
+ assign_to: body.assign_to,
17
+ });
18
+ res.status(200).json({ request });
19
+ }
20
+ catch (error) {
21
+ // Handle validation errors
22
+ if (error instanceof zod_1.z.ZodError) {
23
+ res.status(400).json({
24
+ message: "Invalid request data",
25
+ errors: error.errors,
26
+ type: "invalid_data",
27
+ code: "invalid_data",
28
+ });
29
+ return;
30
+ }
31
+ // Handle MedusaError
32
+ if (error instanceof utils_1.MedusaError) {
33
+ const statusCode = error.type === utils_1.MedusaError.Types.NOT_FOUND ? 404 : 400;
34
+ res.status(statusCode).json({
35
+ message: error.message,
36
+ type: error.type,
37
+ code: error.type,
38
+ });
39
+ return;
40
+ }
41
+ // Handle unexpected errors
42
+ const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
43
+ const errorStack = error instanceof Error ? error.stack : undefined;
44
+ console.error("Error assigning contact request:", error);
45
+ res.status(500).json({
46
+ message: errorMessage,
47
+ type: "unknown_error",
48
+ code: "unknown_error",
49
+ ...(process.env.NODE_ENV === "development" && { stack: errorStack }),
50
+ });
51
+ }
52
+ };
53
+ exports.POST = POST;
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvbnRhY3QtcmVxdWVzdHMvW2lkXS9hc3NpZ24vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQXVEO0FBQ3ZELDZCQUF1QjtBQUN2Qiw4RUFBZ0Y7QUFFaEYsaURBQWtFO0FBRTNELE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNwRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixJQUFJLENBQUM7UUFDSCxpQkFBaUI7UUFDakIsTUFBTSxJQUFJLEdBQUcsNENBQStCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUE7UUFFbEUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQy9CLHlDQUFzQixDQUN2QixDQUFBO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzFDLEVBQUU7WUFDRixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsMkJBQTJCO1FBQzNCLElBQUksS0FBSyxZQUFZLE9BQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbkIsT0FBTyxFQUFFLHNCQUFzQjtnQkFDL0IsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsSUFBSSxFQUFFLGNBQWM7YUFDckIsQ0FBQyxDQUFBO1lBQ0YsT0FBTTtRQUNSLENBQUM7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxLQUFLLFlBQVksbUJBQVcsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxHQUNkLEtBQUssQ0FBQyxJQUFJLEtBQUssbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtZQUN4RCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDMUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTthQUNqQixDQUFDLENBQUE7WUFDRixPQUFNO1FBQ1IsQ0FBQztRQUVELDJCQUEyQjtRQUMzQixNQUFNLFlBQVksR0FDaEIsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUE7UUFDdEUsTUFBTSxVQUFVLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRW5FLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFFeEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLFlBQVk7WUFDckIsSUFBSSxFQUFFLGVBQWU7WUFDckIsSUFBSSxFQUFFLGVBQWU7WUFDckIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLGFBQWEsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztTQUNyRSxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBdkRZLFFBQUEsSUFBSSxRQXVEaEIifQ==
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = exports.GET = void 0;
4
+ const contact_requests_1 = require("../../../../../modules/contact-requests");
5
+ const validators_1 = require("../../validators");
6
+ const GET = async (req, res) => {
7
+ const { id } = req.params;
8
+ const service = req.scope.resolve(contact_requests_1.CONTACT_REQUEST_MODULE);
9
+ const comments = await service.listComments(id);
10
+ res.status(200).json({ comments });
11
+ };
12
+ exports.GET = GET;
13
+ const POST = async (req, res) => {
14
+ const { id } = req.params;
15
+ const body = validators_1.AdminCreateCommentSchema.parse(req.body ?? {});
16
+ const authContext = req.auth_context;
17
+ const adminId = authContext?.actor_id || authContext?.user_id || "admin";
18
+ const service = req.scope.resolve(contact_requests_1.CONTACT_REQUEST_MODULE);
19
+ const comment = await service.createComment({
20
+ contact_request_id: id,
21
+ admin_id: adminId,
22
+ comment: body.comment,
23
+ images: body.images,
24
+ });
25
+ res.status(201).json({ comment });
26
+ };
27
+ exports.POST = POST;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvbnRhY3QtcmVxdWVzdHMvW2lkXS9jb21tZW50cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw4RUFBZ0Y7QUFFaEYsaURBQTJEO0FBRXBELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDL0IseUNBQXNCLENBQ3ZCLENBQUE7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFL0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0FBQ3BDLENBQUMsQ0FBQTtBQVZZLFFBQUEsR0FBRyxPQVVmO0FBRU0sTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO0lBQ3pCLE1BQU0sSUFBSSxHQUFHLHFDQUF3QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRTNELE1BQU0sV0FBVyxHQUFJLEdBRW5CLENBQUMsWUFBWSxDQUFBO0lBQ2YsTUFBTSxPQUFPLEdBQUcsV0FBVyxFQUFFLFFBQVEsSUFBSSxXQUFXLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQTtJQUV4RSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDL0IseUNBQXNCLENBQ3ZCLENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDMUMsa0JBQWtCLEVBQUUsRUFBRTtRQUN0QixRQUFRLEVBQUUsT0FBTztRQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87UUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0tBQ3BCLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtBQUNuQyxDQUFDLENBQUE7QUFyQlksUUFBQSxJQUFJLFFBcUJoQiJ9
@@ -1,17 +1,44 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GET = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
4
5
  const contact_requests_1 = require("../../../../modules/contact-requests");
5
6
  const GET = async (req, res) => {
6
7
  const { id } = req.params;
7
- const service = req.scope.resolve(contact_requests_1.CONTACT_REQUEST_MODULE);
8
- const request = await service.getRequest(id);
9
- // Get next allowed statuses for the admin UI
10
- const nextAllowedStatuses = service.getNextAllowedStatuses(request.status);
11
- res.status(200).json({
12
- request,
13
- next_allowed_statuses: nextAllowedStatuses,
14
- });
8
+ try {
9
+ const service = req.scope.resolve(contact_requests_1.CONTACT_REQUEST_MODULE);
10
+ const request = await service.getRequest(id);
11
+ const comments = await service.listComments(id);
12
+ // Get next allowed statuses for the admin UI
13
+ const nextAllowedStatuses = service.getNextAllowedStatuses(request.status);
14
+ res.status(200).json({
15
+ request,
16
+ comments,
17
+ next_allowed_statuses: nextAllowedStatuses,
18
+ });
19
+ }
20
+ catch (error) {
21
+ // Log error for debugging
22
+ console.error("Error fetching contact request:", error);
23
+ if (error instanceof utils_1.MedusaError) {
24
+ const statusCode = error.type === utils_1.MedusaError.Types.NOT_FOUND ? 404 : 400;
25
+ res.status(statusCode).json({
26
+ message: error.message,
27
+ type: error.type,
28
+ code: error.type,
29
+ });
30
+ return;
31
+ }
32
+ // Handle unexpected errors
33
+ const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
34
+ const errorStack = error instanceof Error ? error.stack : undefined;
35
+ res.status(500).json({
36
+ message: errorMessage,
37
+ type: "unknown_error",
38
+ code: "unknown_error",
39
+ ...(process.env.NODE_ENV === "development" && { stack: errorStack }),
40
+ });
41
+ }
15
42
  };
16
43
  exports.GET = GET;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvbnRhY3QtcmVxdWVzdHMvW2lkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwyRUFBNkU7QUFHdEUsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO0lBRXpCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUMvQix5Q0FBc0IsQ0FDdkIsQ0FBQTtJQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUU1Qyw2Q0FBNkM7SUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25CLE9BQU87UUFDUCxxQkFBcUIsRUFBRSxtQkFBbUI7S0FDM0MsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBaEJZLFFBQUEsR0FBRyxPQWdCZiJ9
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvbnRhY3QtcmVxdWVzdHMvW2lkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBdUQ7QUFDdkQsMkVBQTZFO0FBR3RFLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDL0IseUNBQXNCLENBQ3ZCLENBQUE7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRS9DLDZDQUE2QztRQUM3QyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFMUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTztZQUNQLFFBQVE7WUFDUixxQkFBcUIsRUFBRSxtQkFBbUI7U0FDM0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZiwwQkFBMEI7UUFDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUV2RCxJQUFJLEtBQUssWUFBWSxtQkFBVyxFQUFFLENBQUM7WUFDakMsTUFBTSxVQUFVLEdBQ2QsS0FBSyxDQUFDLElBQUksS0FBSyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1lBQ3hELEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMxQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2FBQ2pCLENBQUMsQ0FBQTtZQUNGLE9BQU07UUFDUixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLE1BQU0sWUFBWSxHQUNoQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQTtRQUN0RSxNQUFNLFVBQVUsR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFbkUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLFlBQVk7WUFDckIsSUFBSSxFQUFFLGVBQWU7WUFDckIsSUFBSSxFQUFFLGVBQWU7WUFDckIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLGFBQWEsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztTQUNyRSxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBOUNZLFFBQUEsR0FBRyxPQThDZiJ9
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AdminUpdateContactRequestStatusSchema = exports.AdminListContactRequestsSchema = exports.AdminCreateContactRequestSchema = void 0;
3
+ exports.AdminCreateCommentSchema = exports.AdminAssignContactRequestSchema = exports.AdminUpdateContactRequestStatusSchema = exports.AdminListContactRequestsSchema = exports.AdminCreateContactRequestSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  exports.AdminCreateContactRequestSchema = zod_1.z.object({
6
6
  email: zod_1.z.string().email(),
@@ -26,4 +26,11 @@ exports.AdminListContactRequestsSchema = zod_1.z.object({
26
26
  exports.AdminUpdateContactRequestStatusSchema = zod_1.z.object({
27
27
  status: zod_1.z.string(),
28
28
  });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vY29udGFjdC1yZXF1ZXN0cy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF1QjtBQUVWLFFBQUEsK0JBQStCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRTtJQUN6QixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDekMsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzlCLENBQUMsQ0FBQTtBQU1XLFFBQUEsOEJBQThCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyRCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixVQUFVLEVBQUUsT0FBQztTQUNWLE1BQU0sQ0FBQztRQUNOLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3JDLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQ3RDLENBQUM7U0FDRCxRQUFRLEVBQUU7SUFDYixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELEtBQUssRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMvRCxlQUFlLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Q0FDekQsQ0FBQyxDQUFBO0FBTVcsUUFBQSxxQ0FBcUMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVELE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0NBQ25CLENBQUMsQ0FBQSJ9
29
+ exports.AdminAssignContactRequestSchema = zod_1.z.object({
30
+ assign_to: zod_1.z.string().nullable(),
31
+ });
32
+ exports.AdminCreateCommentSchema = zod_1.z.object({
33
+ comment: zod_1.z.string().optional(),
34
+ images: zod_1.z.array(zod_1.z.string()).optional(),
35
+ });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vY29udGFjdC1yZXF1ZXN0cy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF1QjtBQUVWLFFBQUEsK0JBQStCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRTtJQUN6QixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDekMsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzlCLENBQUMsQ0FBQTtBQU1XLFFBQUEsOEJBQThCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyRCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixVQUFVLEVBQUUsT0FBQztTQUNWLE1BQU0sQ0FBQztRQUNOLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3JDLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQ3RDLENBQUM7U0FDRCxRQUFRLEVBQUU7SUFDYixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELEtBQUssRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMvRCxlQUFlLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Q0FDekQsQ0FBQyxDQUFBO0FBTVcsUUFBQSxxQ0FBcUMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVELE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0NBQ25CLENBQUMsQ0FBQTtBQU1XLFFBQUEsK0JBQStCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNqQyxDQUFDLENBQUE7QUFNVyxRQUFBLHdCQUF3QixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUIsTUFBTSxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ3ZDLENBQUMsQ0FBQSJ9
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ContactRequestModuleService = exports.CONTACT_REQUEST_MODULE = void 0;
6
+ exports.ContactRequestComment = exports.ContactRequestModuleService = exports.CONTACT_REQUEST_MODULE = void 0;
7
7
  const utils_1 = require("@medusajs/framework/utils");
8
8
  const service_1 = __importDefault(require("./service"));
9
9
  exports.ContactRequestModuleService = service_1.default;
@@ -11,4 +11,6 @@ exports.CONTACT_REQUEST_MODULE = "contact_requests";
11
11
  exports.default = (0, utils_1.Module)(exports.CONTACT_REQUEST_MODULE, {
12
12
  service: service_1.default,
13
13
  });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb250YWN0LXJlcXVlc3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUFrRDtBQUNsRCx3REFBbUQ7QUFRMUMsc0NBUkYsaUJBQTJCLENBUUU7QUFOdkIsUUFBQSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBQTtBQUV4RCxrQkFBZSxJQUFBLGNBQU0sRUFBQyw4QkFBc0IsRUFBRTtJQUM1QyxPQUFPLEVBQUUsaUJBQTJCO0NBQ3JDLENBQUMsQ0FBQSJ9
14
+ var contact_request_comment_1 = require("./models/contact-request-comment");
15
+ Object.defineProperty(exports, "ContactRequestComment", { enumerable: true, get: function () { return contact_request_comment_1.ContactRequestComment; } });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb250YWN0LXJlcXVlc3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUFrRDtBQUNsRCx3REFBbUQ7QUFRMUMsc0NBUkYsaUJBQTJCLENBUUU7QUFOdkIsUUFBQSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBQTtBQUV4RCxrQkFBZSxJQUFBLGNBQU0sRUFBQyw4QkFBc0IsRUFBRTtJQUM1QyxPQUFPLEVBQUUsaUJBQTJCO0NBQ3JDLENBQUMsQ0FBQTtBQUdGLDRFQUF3RTtBQUEvRCxnSUFBQSxxQkFBcUIsT0FBQSJ9
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Migration20241129163317 = void 0;
4
- const migrations_1 = require("@mikro-orm/migrations");
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
5
  class Migration20241129163317 extends migrations_1.Migration {
6
6
  async up() {
7
7
  this.addSql(`
@@ -44,4 +44,4 @@ class Migration20241129163317 extends migrations_1.Migration {
44
44
  }
45
45
  }
46
46
  exports.Migration20241129163317 = Migration20241129163317;
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNDExMjkxNjMzMTcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb250YWN0LXJlcXVlc3RzL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNDExMjkxNjMzMTcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQWlEO0FBRWpELE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7O0tBYVgsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFBO0lBQ3hELENBQUM7Q0FDRjtBQTlDRCwwREE4Q0MifQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNDExMjkxNjMzMTcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb250YWN0LXJlcXVlc3RzL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNDExMjkxNjMzMTcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7O0tBYVgsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFBO0lBQ3hELENBQUM7Q0FDRjtBQTlDRCwwREE4Q0MifQ==
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20251222161335 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20251222161335 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`
8
+ ALTER TABLE "contact_request"
9
+ ADD COLUMN IF NOT EXISTS "assign_to" text NULL;
10
+ `);
11
+ this.addSql(`
12
+ CREATE INDEX IF NOT EXISTS "IDX_contact_request_assign_to"
13
+ ON "contact_request" ("assign_to");
14
+ `);
15
+ }
16
+ async down() {
17
+ this.addSql(`
18
+ DROP INDEX IF EXISTS "IDX_contact_request_assign_to";
19
+ `);
20
+ this.addSql(`
21
+ ALTER TABLE "contact_request"
22
+ DROP COLUMN IF EXISTS "assign_to";
23
+ `);
24
+ }
25
+ }
26
+ exports.Migration20251222161335 = Migration20251222161335;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTEyMjIxNjEzMzUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb250YWN0LXJlcXVlc3RzL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTEyMjIxNjEzMzUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDOztLQUVYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQXZCRCwwREF1QkMifQ==
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20251222161336 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20251222161336 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`
8
+ CREATE TABLE IF NOT EXISTS "contact_request_comment" (
9
+ "id" text PRIMARY KEY,
10
+ "admin_id" text NOT NULL,
11
+ "contact_request_id" text NOT NULL,
12
+ "comment" text NULL,
13
+ "images" jsonb NULL,
14
+ "created_at" timestamptz NOT NULL DEFAULT now(),
15
+ "updated_at" timestamptz NOT NULL DEFAULT now(),
16
+ "deleted_at" timestamptz NULL
17
+ );
18
+ `);
19
+ this.addSql(`
20
+ CREATE INDEX IF NOT EXISTS "IDX_contact_request_comment_contact_request_id"
21
+ ON "contact_request_comment" ("contact_request_id");
22
+ `);
23
+ this.addSql(`
24
+ CREATE INDEX IF NOT EXISTS "IDX_contact_request_comment_admin_id"
25
+ ON "contact_request_comment" ("admin_id");
26
+ `);
27
+ this.addSql(`
28
+ CREATE INDEX IF NOT EXISTS "IDX_contact_request_comment_deleted_at"
29
+ ON "contact_request_comment" ("deleted_at");
30
+ `);
31
+ }
32
+ async down() {
33
+ this.addSql(`DROP TABLE IF EXISTS "contact_request_comment";`);
34
+ }
35
+ }
36
+ exports.Migration20251222161336 = Migration20251222161336;
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTEyMjIxNjEzMzYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb250YWN0LXJlcXVlc3RzL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTEyMjIxNjEzMzYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7OztLQVdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsaURBQWlELENBQUMsQ0FBQTtJQUNoRSxDQUFDO0NBQ0Y7QUFsQ0QsMERBa0NDIn0=