Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .cursor/rules/claude-desktop-config.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@executeautomation/playwright-mcp-server"]
}
}
}
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@executeautomation/playwright-mcp-server"]
}
}
}
12 changes: 6 additions & 6 deletions .cursor/rules/mcp.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"mcpServers": {
"context7": {
"url": "https://mcp.context7.com/mcp"
}
}
}
"mcpServers": {
"context7": {
"url": "https://mcp.context7.com/mcp"
}
}
}
15 changes: 10 additions & 5 deletions apps/api/config/clerkConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,19 @@ import dotenv from 'dotenv';
dotenv.config({ path: '.env.local' });
dotenv.config();


const WEBHOOK_SECRET = process.env.WEBHOOK_SECRET;
const CLERK_SECRET_KEY = process.env.CLERK_SECRET_KEY;

console.log('🔍 ClerkConfig - WEBHOOK_SECRET available:', !!WEBHOOK_SECRET);
console.log('🔍 ClerkConfig - WEBHOOK_SECRET length:', WEBHOOK_SECRET ? WEBHOOK_SECRET.length : 0);
console.log(
'🔍 ClerkConfig - WEBHOOK_SECRET length:',
WEBHOOK_SECRET ? WEBHOOK_SECRET.length : 0,
);
console.log('🔍 ClerkConfig - CLERK_SECRET_KEY available:', !!CLERK_SECRET_KEY);
console.log('🔍 ClerkConfig - CLERK_SECRET_KEY length:', CLERK_SECRET_KEY ? CLERK_SECRET_KEY.length : 0);
console.log(
'🔍 ClerkConfig - CLERK_SECRET_KEY length:',
CLERK_SECRET_KEY ? CLERK_SECRET_KEY.length : 0,
);

console.log('🔍 ClerkConfig - About to check WEBHOOK_SECRET:', WEBHOOK_SECRET);
// Temporarily comment out the webhook secret check for debugging
Expand All @@ -23,8 +28,8 @@ console.log('🔍 ClerkConfig - About to check WEBHOOK_SECRET:', WEBHOOK_SECRET)
// }

if (!CLERK_SECRET_KEY) {
console.error('❌ Missing Clerk API Secret Key!');
process.exit(1);
console.error('❌ Missing Clerk API Secret Key!');
process.exit(1);
}

export { WEBHOOK_SECRET, CLERK_SECRET_KEY };
39 changes: 20 additions & 19 deletions apps/api/controllers/categoryController.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

export const getCategories = async (req, res) => {
try {
const lang = req.query.lang || 'ru';
const categories = await prisma.category.findMany({
orderBy: { name: 'asc' },
include: { translations: true }
});
const result = categories.map(category => {
const translation = category.translations.find(t => t.lang === lang);
return {
id: category.id,
label: translation?.name || category.name
};
});
res.json(result);
} catch (error) {
console.error('Ошибка при получении категорий:', error);
res.status(500).json({ error: 'Ошибка при получении категорий' });
}
};
try {
const lang = req.query.lang || 'ru';
const categories = await prisma.category.findMany({
orderBy: { name: 'asc' },
include: { translations: true },
});
const result = categories.map((category) => {
const translation = category.translations.find((t) => t.lang === lang);
return {
id: category.id,
label: translation?.name || category.name,
};
});
res.json(result);
} catch (error) {
console.error('Ошибка при получении категорий:', error);
res.status(500).json({ error: 'Ошибка при получении категорий' });
}
};
14 changes: 7 additions & 7 deletions apps/api/controllers/cityController.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { getCitiesService } from '../services/cityService.js';

export const getCities = async (req, res) => {
const lang = req.query.lang || 'ru';
const result = await getCitiesService(lang);
const lang = req.query.lang || 'ru';
const result = await getCitiesService(lang);

if (result.error) {
console.error("❌ Ошибка в getCitiesService:", result.error);
return res.status(500).json({ error: result.error });
}
if (result.error) {
console.error('❌ Ошибка в getCitiesService:', result.error);
return res.status(500).json({ error: result.error });
}

res.status(200).json(result.cities);
res.status(200).json(result.cities);
};
85 changes: 46 additions & 39 deletions apps/api/controllers/jobController.js
Original file line number Diff line number Diff line change
@@ -1,49 +1,56 @@
import { getJobByIdService } from "../services/getJobById.js";
import { createJobService } from "../services/createJobService.js";
import { createJobService } from '../services/createJobService.js';
import { getJobByIdService } from '../services/getJobById.js';

export const getJobById = async (req, res) => {
const { id } = req.params;
const { id } = req.params;

if (!id || isNaN(Number(id))) {
return res.status(400).json({ error: "ID вакансии обязателен и должен быть числом" });
}
if (!id || isNaN(Number(id))) {
return res
.status(400)
.json({ error: 'ID вакансии обязателен и должен быть числом' });
}

try {
const result = await getJobByIdService(Number(id)); // Передаем число
try {
const result = await getJobByIdService(Number(id)); // Передаем число

if (result.error) {
return res.status(404).json({ error: result.error });
}
if (result.error) {
return res.status(404).json({ error: result.error });
}

console.log('🔍 getJobById - Job data:', result.job);
res.status(200).json(result.job);
} catch (error) {
console.error("Ошибка получения объявления:", error.message);
res.status(500).json({ error: "Ошибка получения объявления", details: error.message });
}
console.log('🔍 getJobById - Job data:', result.job);
res.status(200).json(result.job);
} catch (error) {
console.error('Ошибка получения объявления:', error.message);
res
.status(500)
.json({ error: 'Ошибка получения объявления', details: error.message });
}
};

export const createJob = async (req, res) => {
const jobData = req.body;

try {
const result = await createJobService(jobData);

if (result.error) {
// Check if upgrade is required
if (result.upgradeRequired) {
return res.status(403).json({
error: result.error,
upgradeRequired: true,
message: "Для размещения большего количества объявлений перейдите на Premium тариф"
});
}
return res.status(400).json({ error: result.error });
}

res.status(201).json(result);
} catch (error) {
console.error("Ошибка создания объявления:", error.message);
res.status(500).json({ error: "Ошибка создания объявления", details: error.message });
}
const jobData = req.body;

try {
const result = await createJobService(jobData);

if (result.error) {
// Check if upgrade is required
if (result.upgradeRequired) {
return res.status(403).json({
error: result.error,
upgradeRequired: true,
message:
'Для размещения большего количества объявлений перейдите на Premium тариф',
});
}
return res.status(400).json({ error: result.error });
}

res.status(201).json(result);
} catch (error) {
console.error('Ошибка создания объявления:', error.message);
res
.status(500)
.json({ error: 'Ошибка создания объявления', details: error.message });
}
};
Loading
Loading