fix: use SSL-tolerant axios instance for server-side API calls

صفحات سرور (doctors, doctor/[slug], appointment/[doctorId]) از axios خام
استفاده می‌کردند که گواهی self-signed ddev محلی را رد می‌کرد
(unable to verify the first certificate). حالا از axiosInstance/fetchReq
در lib/req استفاده می‌کنند که در development آن را می‌پذیرد.
افزودن clinic-pro.ddev.site (http/https) به remotePatterns تصاویر.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
hamed
2026-06-15 00:21:34 +03:30
co-authored by Claude Opus 4.8
parent f3192945c7
commit 1d56972b65
5 changed files with 18 additions and 11 deletions
+3 -3
View File
@@ -1,6 +1,6 @@
import AppointmentPage from "@/components/appointment"; import AppointmentPage from "@/components/appointment";
import { getStateInfo } from "@/lib/getStateInfo"; import { getStateInfo } from "@/lib/getStateInfo";
import axios from "axios"; import { axiosInstance } from "@/lib/req";
async function Appointment({ params }) { async function Appointment({ params }) {
const { doctorId } = await params; const { doctorId } = await params;
@@ -11,11 +11,11 @@ async function Appointment({ params }) {
let disabledDates = []; let disabledDates = [];
try { try {
const doctorRes = await axios.get(`${API_URL}/api/v1/doctor/${doctorId}`); const doctorRes = await axiosInstance.get(`${API_URL}/api/v1/doctor/${doctorId}`);
doctor = doctorRes.data; doctor = doctorRes.data;
if (doctor && doctor.id) { if (doctor && doctor.id) {
const disabledDatesRes = await axios.get( const disabledDatesRes = await axiosInstance.get(
`${API_URL}/api/v1/appointment/not-available/${doctor.id}`, `${API_URL}/api/v1/appointment/not-available/${doctor.id}`,
{ headers: { "Content-Type": "application/json" } } { headers: { "Content-Type": "application/json" } }
); );
+4 -4
View File
@@ -1,7 +1,7 @@
import DoctorPage from "@/components/doctor"; import DoctorPage from "@/components/doctor";
import Layout from "@/components/layout/StLayout"; import Layout from "@/components/layout/StLayout";
import { getStateInfo } from "@/lib/getStateInfo"; import { getStateInfo } from "@/lib/getStateInfo";
import axios from "axios"; import { axiosInstance } from "@/lib/req";
export async function generateMetadata({ params }) { export async function generateMetadata({ params }) {
const { slug } = await params; const { slug } = await params;
@@ -10,7 +10,7 @@ export async function generateMetadata({ params }) {
const siteName = matchedCity?.site_name || "نوبت 724"; const siteName = matchedCity?.site_name || "نوبت 724";
try { try {
const res = await axios.get(`${API_URL}/api/v1/doctor/${slug}`); const res = await axiosInstance.get(`${API_URL}/api/v1/doctor/${slug}`);
const doctor = res.data; const doctor = res.data;
if (!doctor) return {}; if (!doctor) return {};
@@ -48,10 +48,10 @@ async function Doctor({ params }) {
const API_URL = process.env.NEXT_PUBLIC_API_URL; const API_URL = process.env.NEXT_PUBLIC_API_URL;
try { try {
const resDoctor = await axios.get(`${API_URL}/api/v1/doctor/${slug}`); const resDoctor = await axiosInstance.get(`${API_URL}/api/v1/doctor/${slug}`);
doctor = resDoctor.data; doctor = resDoctor.data;
if (doctor) { if (doctor) {
const resComments = await axios.get( const resComments = await axiosInstance.get(
`${API_URL}/api/v1/clinicpro/comments/${doctor.id}` `${API_URL}/api/v1/clinicpro/comments/${doctor.id}`
); );
comments = resComments?.data?.data; comments = resComments?.data?.data;
+2 -3
View File
@@ -2,7 +2,7 @@ import DoctorsPage from "@/components/doctors";
import Layout from "@/components/layout/StLayout"; import Layout from "@/components/layout/StLayout";
import { buildDoctorParams } from "@/helper"; import { buildDoctorParams } from "@/helper";
import { getStateInfo } from "@/lib/getStateInfo"; import { getStateInfo } from "@/lib/getStateInfo";
import axios from "axios"; import { fetchReq } from "@/lib/req";
export async function generateMetadata() { export async function generateMetadata() {
const { matchedCity, matchedState } = await getStateInfo(); const { matchedCity, matchedState } = await getStateInfo();
@@ -44,10 +44,9 @@ async function Doctors({ searchParams }) {
const params = buildDoctorParams(newSearchParams); const params = buildDoctorParams(newSearchParams);
const response = await axios.get(`${API_URL}/api/v1/doctors`, { doctors = await fetchReq(`${API_URL}/api/v1/doctors`, {
params, params,
}); });
doctors = response.data;
} catch (error) { } catch (error) {
console.error("Error fetching doctors:", error); console.error("Error fetching doctors:", error);
} }
+1 -1
View File
@@ -1,7 +1,7 @@
import axios from "axios"; import axios from "axios";
import https from "https"; import https from "https";
const axiosInstance = axios.create({ export const axiosInstance = axios.create({
...(process.env.NODE_ENV === "development" && { ...(process.env.NODE_ENV === "development" && {
httpsAgent: new https.Agent({ rejectUnauthorized: false }), httpsAgent: new https.Agent({ rejectUnauthorized: false }),
}), }),
+8
View File
@@ -20,6 +20,14 @@ const nextConfig = {
protocol: 'https', protocol: 'https',
hostname: 'clinic-pro-back.ddev.site', hostname: 'clinic-pro-back.ddev.site',
}, },
{
protocol: 'https',
hostname: 'clinic-pro.ddev.site',
},
{
protocol: 'http',
hostname: 'clinic-pro.ddev.site',
},
], ],
}, },
env: { env: {