Compare commits
4 Commits
b3f2da203b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c31eca4b58 | ||
|
|
d3548cf7ff | ||
|
|
29ba4867bf | ||
|
|
a1f70a5b46 |
9
.gitignore
vendored
9
.gitignore
vendored
@@ -3,13 +3,10 @@ dist/
|
|||||||
build/
|
build/
|
||||||
.env
|
.env
|
||||||
backend/.env
|
backend/.env
|
||||||
data/postgres/
|
|
||||||
!data/.gitkeep
|
|
||||||
!data/seed/
|
|
||||||
!data/seed/**
|
|
||||||
uploads/*
|
|
||||||
!uploads/.gitkeep
|
|
||||||
*.log
|
*.log
|
||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
frontend/.lan-ip
|
frontend/.lan-ip
|
||||||
|
# DB lock files (recreated on server start)
|
||||||
|
data/postgres/postmaster.pid
|
||||||
|
data/postgres/postmaster.opts
|
||||||
|
|||||||
@@ -261,10 +261,9 @@ function buildMilestones(p: HrProject): MappedTask['milestones'] {
|
|||||||
return milestones;
|
return milestones;
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildDetailContent(p: HrProject): string | null {
|
/** @deprecated progressStatus는 milestone·periodEntries로 이관 — TaskDetail(피드백)에 넣지 않음 */
|
||||||
const content = p.progressStatus?.trim() || p.progressLog?.trim();
|
function buildDetailContent(_p: HrProject): string | null {
|
||||||
if (!content || content === '이슈사항' || content === '12') return null;
|
return null;
|
||||||
return content;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function mapHrProjectToTask(p: HrProject, quarter = '2026-Q2'): MappedTask {
|
export function mapHrProjectToTask(p: HrProject, quarter = '2026-Q2'): MappedTask {
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "tasks" ADD COLUMN "detailDescription" TEXT;
|
||||||
|
|
||||||
|
-- 기존 description(첫 줄=개요, 이후=상세) → 분리 (실행과제·프로젝트만)
|
||||||
|
UPDATE "tasks"
|
||||||
|
SET
|
||||||
|
"detailDescription" = CASE
|
||||||
|
WHEN position(E'\n' in "description") > 0
|
||||||
|
THEN NULLIF(trim(substring("description" from position(E'\n' in "description") + 1)), '')
|
||||||
|
ELSE NULL
|
||||||
|
END,
|
||||||
|
"description" = NULLIF(trim(split_part("description", E'\n', 1)), '')
|
||||||
|
WHERE "description" IS NOT NULL
|
||||||
|
AND trim("description") != ''
|
||||||
|
AND ("taskType" = '실행과제' OR "taskType" = '프로젝트');
|
||||||
@@ -66,6 +66,7 @@ model Task {
|
|||||||
id String @id @default(cuid())
|
id String @id @default(cuid())
|
||||||
title String
|
title String
|
||||||
description String?
|
description String?
|
||||||
|
detailDescription String?
|
||||||
status TaskStatus @default(TODO)
|
status TaskStatus @default(TODO)
|
||||||
priority Priority @default(MEDIUM)
|
priority Priority @default(MEDIUM)
|
||||||
quarter String // 예: "2026-Q2"
|
quarter String // 예: "2026-Q2"
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ const HUB_CONFIG = {
|
|||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
routineLabels: ['채용 운영', '학습 지원', '직원 소통', '자산·시설', '문서·행정'],
|
routineLabels: ['채용 운영', '학습 지원', '운영 지원', '자산·시설', '문서·행정'],
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
54
backend/scripts/cleanup-legacy-task-details.ts
Normal file
54
backend/scripts/cleanup-legacy-task-details.ts
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/**
|
||||||
|
* HR import 시 TaskDetail(피드백)에 잘못 들어간 progressStatus 레거시 삭제
|
||||||
|
* — milestoneId 없고 authorName 없는 행 (seed 자동 생성분)
|
||||||
|
*
|
||||||
|
* npx tsx scripts/cleanup-legacy-task-details.ts
|
||||||
|
* npx tsx scripts/cleanup-legacy-task-details.ts --dry-run
|
||||||
|
*/
|
||||||
|
import 'dotenv/config';
|
||||||
|
import { PrismaClient } from '@prisma/client';
|
||||||
|
|
||||||
|
const prisma = new PrismaClient();
|
||||||
|
const dryRun = process.argv.includes('--dry-run');
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const legacy = await prisma.taskDetail.findMany({
|
||||||
|
where: {
|
||||||
|
milestoneId: null,
|
||||||
|
OR: [{ authorName: null }, { authorName: '' }],
|
||||||
|
},
|
||||||
|
include: { task: { select: { title: true } } },
|
||||||
|
orderBy: { createdAt: 'asc' },
|
||||||
|
});
|
||||||
|
|
||||||
|
if (legacy.length === 0) {
|
||||||
|
console.log('✅ 삭제할 레거시 피드백 없음');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`레거시 TaskDetail ${legacy.length}건 (일정 미연결 · 작성자 없음):`);
|
||||||
|
for (const row of legacy) {
|
||||||
|
const preview = row.content.replace(/\s+/g, ' ').slice(0, 72);
|
||||||
|
console.log(` · [${row.task.title}] ${preview}${row.content.length > 72 ? '…' : ''}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dryRun) {
|
||||||
|
console.log('\n(dry-run — 삭제하지 않음. 적용: npx tsx scripts/cleanup-legacy-task-details.ts)');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await prisma.taskDetail.deleteMany({
|
||||||
|
where: {
|
||||||
|
id: { in: legacy.map((r) => r.id) },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`\n✅ ${result.count}건 삭제 완료`);
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(err);
|
||||||
|
process.exit(1);
|
||||||
|
})
|
||||||
|
.finally(() => prisma.$disconnect());
|
||||||
77
backend/scripts/normalize-task-sections.ts
Normal file
77
backend/scripts/normalize-task-sections.ts
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
/**
|
||||||
|
* task.section 레거시 값 정규화 + 조직문화(EX) 재배치
|
||||||
|
* npx tsx scripts/normalize-task-sections.ts
|
||||||
|
*/
|
||||||
|
import 'dotenv/config';
|
||||||
|
import { PrismaClient } from '@prisma/client';
|
||||||
|
|
||||||
|
const prisma = new PrismaClient();
|
||||||
|
|
||||||
|
const EX_TITLE = /회사생활|C\.E\.L|조직문화|복리후생|문화\s*진단|직원\s*소통/i;
|
||||||
|
|
||||||
|
const SECTION_MAP: Record<string, string> = {
|
||||||
|
성장지원: '학습성장',
|
||||||
|
HR: '인사관리',
|
||||||
|
운영지원: '운영관리',
|
||||||
|
전산관리: '운영관리',
|
||||||
|
};
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const tasks = await prisma.task.findMany({
|
||||||
|
select: { id: true, title: true, section: true, category: true, taskType: true },
|
||||||
|
});
|
||||||
|
|
||||||
|
let renamed = 0;
|
||||||
|
let exMoved = 0;
|
||||||
|
|
||||||
|
for (const task of tasks) {
|
||||||
|
const section = task.section?.trim() ?? '';
|
||||||
|
let nextSection = SECTION_MAP[section] ?? section;
|
||||||
|
|
||||||
|
if (nextSection !== '조직문화' && EX_TITLE.test(task.title.trim())) {
|
||||||
|
nextSection = '조직문화';
|
||||||
|
exMoved += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const patch: { section?: string; category?: string | null } = {};
|
||||||
|
if (nextSection && nextSection !== section) {
|
||||||
|
patch.section = nextSection;
|
||||||
|
renamed += 1;
|
||||||
|
}
|
||||||
|
if (nextSection === '조직문화' && task.category !== '조직문화') {
|
||||||
|
patch.category = '조직문화';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Object.keys(patch).length > 0) {
|
||||||
|
await prisma.task.update({ where: { id: task.id }, data: patch });
|
||||||
|
console.log(` section: ${section || '(empty)'} → ${nextSection} | ${task.title}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const col = await prisma.columnConfig.findUnique({ where: { key: '운영관리' } });
|
||||||
|
if (col && (col.title === '운영관리' || col.title === '운영관리 부문' || col.titleEn === 'Operations')) {
|
||||||
|
await prisma.columnConfig.update({
|
||||||
|
where: { key: '운영관리' },
|
||||||
|
data: { title: '총무관리', titleEn: 'GA' },
|
||||||
|
});
|
||||||
|
console.log(' columnConfig 운영관리 → 총무관리');
|
||||||
|
}
|
||||||
|
|
||||||
|
const hrd = await prisma.columnConfig.findUnique({ where: { key: '학습성장' } });
|
||||||
|
if (hrd && (hrd.title === '학습성장' || hrd.title === '성장지원' || hrd.titleEn === 'Learning & Growth')) {
|
||||||
|
await prisma.columnConfig.update({
|
||||||
|
where: { key: '학습성장' },
|
||||||
|
data: { title: '인재육성', titleEn: 'HRD' },
|
||||||
|
});
|
||||||
|
console.log(' columnConfig 학습성장 → 인재육성');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`\n✅ normalize-task-sections complete (${renamed} renamed, ${exMoved} → 조직문화)`);
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(err);
|
||||||
|
process.exit(1);
|
||||||
|
})
|
||||||
|
.finally(() => prisma.$disconnect());
|
||||||
@@ -2,12 +2,20 @@ export interface TaskIssueEntry {
|
|||||||
id: string;
|
id: string;
|
||||||
text: string;
|
text: string;
|
||||||
showOnCard: boolean;
|
showOnCard: boolean;
|
||||||
|
occurredOn?: string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function newIssueId() {
|
function newIssueId() {
|
||||||
return `issue-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
|
return `issue-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeOccurredOn(raw: unknown): string | null {
|
||||||
|
if (typeof raw !== 'string' || !raw.trim()) return null;
|
||||||
|
const iso = raw.trim();
|
||||||
|
if (!/^\d{4}-\d{2}-\d{2}$/.test(iso)) return null;
|
||||||
|
return iso;
|
||||||
|
}
|
||||||
|
|
||||||
export function normalizeIssueEntries(raw: unknown): TaskIssueEntry[] {
|
export function normalizeIssueEntries(raw: unknown): TaskIssueEntry[] {
|
||||||
if (!Array.isArray(raw)) return [];
|
if (!Array.isArray(raw)) return [];
|
||||||
const entries: TaskIssueEntry[] = [];
|
const entries: TaskIssueEntry[] = [];
|
||||||
@@ -20,6 +28,7 @@ export function normalizeIssueEntries(raw: unknown): TaskIssueEntry[] {
|
|||||||
id: typeof row.id === 'string' && row.id ? row.id : newIssueId(),
|
id: typeof row.id === 'string' && row.id ? row.id : newIssueId(),
|
||||||
text,
|
text,
|
||||||
showOnCard: row.showOnCard !== false,
|
showOnCard: row.showOnCard !== false,
|
||||||
|
occurredOn: normalizeOccurredOn(row.occurredOn),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return entries;
|
return entries;
|
||||||
@@ -34,7 +43,7 @@ export function parseIssueEntriesFromTask(task: {
|
|||||||
if (fromJson.length > 0) return fromJson;
|
if (fromJson.length > 0) return fromJson;
|
||||||
const legacy = task.issueNote?.trim();
|
const legacy = task.issueNote?.trim();
|
||||||
if (!legacy) return [];
|
if (!legacy) return [];
|
||||||
return [{ id: 'legacy', text: legacy, showOnCard: task.showIssue !== false }];
|
return [{ id: 'legacy', text: legacy, showOnCard: task.showIssue !== false, occurredOn: null }];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function deriveIssueFields(entries: TaskIssueEntry[]) {
|
export function deriveIssueFields(entries: TaskIssueEntry[]) {
|
||||||
|
|||||||
@@ -25,6 +25,18 @@ export const taskInclude = {
|
|||||||
taskAssignees: {
|
taskAssignees: {
|
||||||
include: { member: { select: teamMemberSelect } },
|
include: { member: { select: teamMemberSelect } },
|
||||||
},
|
},
|
||||||
|
milestones: {
|
||||||
|
orderBy: { order: 'asc' as const },
|
||||||
|
select: {
|
||||||
|
id: true,
|
||||||
|
title: true,
|
||||||
|
progress: true,
|
||||||
|
startDate: true,
|
||||||
|
dueDate: true,
|
||||||
|
periodEntries: true,
|
||||||
|
order: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
_count: { select: { files: true, details: true } },
|
_count: { select: { files: true, details: true } },
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
|
|||||||
@@ -13,11 +13,22 @@ export const DEFAULT_HUB_CONFIG = {
|
|||||||
{ id: '2', date: '2026-05-15', text: '조직문화 진단·리더십 교육' },
|
{ id: '2', date: '2026-05-15', text: '조직문화 진단·리더십 교육' },
|
||||||
{ id: '3', date: '2026-06-20', text: '분기 성과 점검·평가' },
|
{ id: '3', date: '2026-06-20', text: '분기 성과 점검·평가' },
|
||||||
],
|
],
|
||||||
routineLabels: ['채용 운영', '학습 지원', '직원 소통', '자산·시설', '문서·행정'],
|
routineLabels: ['채용 운영', '학습 지원', '운영 지원', '자산·시설', '문서·행정'],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function migrateRoutineLabels(labels: string[]): string[] {
|
||||||
|
return labels.map((label) => {
|
||||||
|
if (label === '교육 운영') return '학습 지원';
|
||||||
|
if (label === '직원 소통') return '운영 지원';
|
||||||
|
return label;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function normalizeConfig(raw: Record<string, unknown>) {
|
function normalizeConfig(raw: Record<string, unknown>) {
|
||||||
const sloganTitle = (raw.sloganTitle as string) ?? DEFAULT_HUB_CONFIG.sloganTitle;
|
const sloganTitle = (raw.sloganTitle as string) ?? DEFAULT_HUB_CONFIG.sloganTitle;
|
||||||
|
const routineLabels = Array.isArray(raw.routineLabels)
|
||||||
|
? migrateRoutineLabels(raw.routineLabels as string[])
|
||||||
|
: DEFAULT_HUB_CONFIG.routineLabels;
|
||||||
return {
|
return {
|
||||||
sloganTitle: sloganTitle === '분기 슬로건' ? '분기 중점 과제' : sloganTitle,
|
sloganTitle: sloganTitle === '분기 슬로건' ? '분기 중점 과제' : sloganTitle,
|
||||||
sloganLines: Array.isArray(raw.sloganLines)
|
sloganLines: Array.isArray(raw.sloganLines)
|
||||||
@@ -27,9 +38,7 @@ function normalizeConfig(raw: Record<string, unknown>) {
|
|||||||
scheduleItems: Array.isArray(raw.scheduleItems)
|
scheduleItems: Array.isArray(raw.scheduleItems)
|
||||||
? (raw.scheduleItems as typeof DEFAULT_HUB_CONFIG.scheduleItems)
|
? (raw.scheduleItems as typeof DEFAULT_HUB_CONFIG.scheduleItems)
|
||||||
: DEFAULT_HUB_CONFIG.scheduleItems,
|
: DEFAULT_HUB_CONFIG.scheduleItems,
|
||||||
routineLabels: Array.isArray(raw.routineLabels)
|
routineLabels,
|
||||||
? (raw.routineLabels as string[])
|
|
||||||
: DEFAULT_HUB_CONFIG.routineLabels,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ router.get('/:id', async (req, res, next) => {
|
|||||||
router.post('/', async (req, res, next) => {
|
router.post('/', async (req, res, next) => {
|
||||||
try {
|
try {
|
||||||
const body = req.body as Record<string, any>;
|
const body = req.body as Record<string, any>;
|
||||||
const { title, description, status, priority, quarter, category,
|
const { title, description, detailDescription, status, priority, quarter, category,
|
||||||
section, tag, taskType, progress, issueNote, startDate, dueDate, assigneeId, showDate,
|
section, tag, taskType, progress, issueNote, startDate, dueDate, assigneeId, showDate,
|
||||||
showDescription, showStatus, showIssue, showProgress, pmMemberId } = body;
|
showDescription, showStatus, showIssue, showProgress, pmMemberId } = body;
|
||||||
|
|
||||||
@@ -88,6 +88,7 @@ router.post('/', async (req, res, next) => {
|
|||||||
data: {
|
data: {
|
||||||
title,
|
title,
|
||||||
description,
|
description,
|
||||||
|
detailDescription: detailDescription ?? null,
|
||||||
status: (status as any) || 'TODO',
|
status: (status as any) || 'TODO',
|
||||||
priority: (priority as any) || 'MEDIUM',
|
priority: (priority as any) || 'MEDIUM',
|
||||||
quarter,
|
quarter,
|
||||||
@@ -135,7 +136,7 @@ router.patch('/:id', async (req, res, next) => {
|
|||||||
if (!existing) throw new AppError(404, '업무를 찾을 수 없습니다.');
|
if (!existing) throw new AppError(404, '업무를 찾을 수 없습니다.');
|
||||||
|
|
||||||
const body = req.body as Record<string, any>;
|
const body = req.body as Record<string, any>;
|
||||||
const { title, description, status, priority, quarter, category,
|
const { title, description, detailDescription, status, priority, quarter, category,
|
||||||
section, tag, taskType, progress, issueNote, startDate, dueDate, assigneeId, showDate,
|
section, tag, taskType, progress, issueNote, startDate, dueDate, assigneeId, showDate,
|
||||||
showDescription, showStatus, showIssue, showProgress, pmMemberId } = body;
|
showDescription, showStatus, showIssue, showProgress, pmMemberId } = body;
|
||||||
|
|
||||||
@@ -147,6 +148,7 @@ router.patch('/:id', async (req, res, next) => {
|
|||||||
data: {
|
data: {
|
||||||
...(title && { title }),
|
...(title && { title }),
|
||||||
...(description !== undefined && { description }),
|
...(description !== undefined && { description }),
|
||||||
|
...(detailDescription !== undefined && { detailDescription: detailDescription || null }),
|
||||||
...(status && { status: status as any }),
|
...(status && { status: status as any }),
|
||||||
...(priority && { priority: priority as any }),
|
...(priority && { priority: priority as any }),
|
||||||
...(quarter && { quarter }),
|
...(quarter && { quarter }),
|
||||||
|
|||||||
1
data/postgres/PG_VERSION
Normal file
1
data/postgres/PG_VERSION
Normal file
@@ -0,0 +1 @@
|
|||||||
|
16
|
||||||
BIN
data/postgres/base/1/112
Normal file
BIN
data/postgres/base/1/112
Normal file
Binary file not shown.
BIN
data/postgres/base/1/113
Normal file
BIN
data/postgres/base/1/113
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1247
Normal file
BIN
data/postgres/base/1/1247
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1247_fsm
Normal file
BIN
data/postgres/base/1/1247_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1247_vm
Normal file
BIN
data/postgres/base/1/1247_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1249
Normal file
BIN
data/postgres/base/1/1249
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1249_fsm
Normal file
BIN
data/postgres/base/1/1249_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1249_vm
Normal file
BIN
data/postgres/base/1/1249_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1255
Normal file
BIN
data/postgres/base/1/1255
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1255_fsm
Normal file
BIN
data/postgres/base/1/1255_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1255_vm
Normal file
BIN
data/postgres/base/1/1255_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1259
Normal file
BIN
data/postgres/base/1/1259
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1259_fsm
Normal file
BIN
data/postgres/base/1/1259_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/1259_vm
Normal file
BIN
data/postgres/base/1/1259_vm
Normal file
Binary file not shown.
0
data/postgres/base/1/1417
Normal file
0
data/postgres/base/1/1417
Normal file
0
data/postgres/base/1/1418
Normal file
0
data/postgres/base/1/1418
Normal file
BIN
data/postgres/base/1/14928
Normal file
BIN
data/postgres/base/1/14928
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14928_fsm
Normal file
BIN
data/postgres/base/1/14928_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14928_vm
Normal file
BIN
data/postgres/base/1/14928_vm
Normal file
Binary file not shown.
0
data/postgres/base/1/14931
Normal file
0
data/postgres/base/1/14931
Normal file
BIN
data/postgres/base/1/14932
Normal file
BIN
data/postgres/base/1/14932
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14933
Normal file
BIN
data/postgres/base/1/14933
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14933_fsm
Normal file
BIN
data/postgres/base/1/14933_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14933_vm
Normal file
BIN
data/postgres/base/1/14933_vm
Normal file
Binary file not shown.
0
data/postgres/base/1/14936
Normal file
0
data/postgres/base/1/14936
Normal file
BIN
data/postgres/base/1/14937
Normal file
BIN
data/postgres/base/1/14937
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14938
Normal file
BIN
data/postgres/base/1/14938
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14938_fsm
Normal file
BIN
data/postgres/base/1/14938_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14938_vm
Normal file
BIN
data/postgres/base/1/14938_vm
Normal file
Binary file not shown.
0
data/postgres/base/1/14941
Normal file
0
data/postgres/base/1/14941
Normal file
BIN
data/postgres/base/1/14942
Normal file
BIN
data/postgres/base/1/14942
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14943
Normal file
BIN
data/postgres/base/1/14943
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14943_fsm
Normal file
BIN
data/postgres/base/1/14943_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/14943_vm
Normal file
BIN
data/postgres/base/1/14943_vm
Normal file
Binary file not shown.
0
data/postgres/base/1/14946
Normal file
0
data/postgres/base/1/14946
Normal file
BIN
data/postgres/base/1/14947
Normal file
BIN
data/postgres/base/1/14947
Normal file
Binary file not shown.
BIN
data/postgres/base/1/174
Normal file
BIN
data/postgres/base/1/174
Normal file
Binary file not shown.
BIN
data/postgres/base/1/175
Normal file
BIN
data/postgres/base/1/175
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2187
Normal file
BIN
data/postgres/base/1/2187
Normal file
Binary file not shown.
0
data/postgres/base/1/2224
Normal file
0
data/postgres/base/1/2224
Normal file
BIN
data/postgres/base/1/2228
Normal file
BIN
data/postgres/base/1/2228
Normal file
Binary file not shown.
0
data/postgres/base/1/2328
Normal file
0
data/postgres/base/1/2328
Normal file
0
data/postgres/base/1/2336
Normal file
0
data/postgres/base/1/2336
Normal file
BIN
data/postgres/base/1/2337
Normal file
BIN
data/postgres/base/1/2337
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2579
Normal file
BIN
data/postgres/base/1/2579
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2600
Normal file
BIN
data/postgres/base/1/2600
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2600_fsm
Normal file
BIN
data/postgres/base/1/2600_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2600_vm
Normal file
BIN
data/postgres/base/1/2600_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2601
Normal file
BIN
data/postgres/base/1/2601
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2601_fsm
Normal file
BIN
data/postgres/base/1/2601_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2601_vm
Normal file
BIN
data/postgres/base/1/2601_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2602
Normal file
BIN
data/postgres/base/1/2602
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2602_fsm
Normal file
BIN
data/postgres/base/1/2602_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2602_vm
Normal file
BIN
data/postgres/base/1/2602_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2603
Normal file
BIN
data/postgres/base/1/2603
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2603_fsm
Normal file
BIN
data/postgres/base/1/2603_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2603_vm
Normal file
BIN
data/postgres/base/1/2603_vm
Normal file
Binary file not shown.
0
data/postgres/base/1/2604
Normal file
0
data/postgres/base/1/2604
Normal file
BIN
data/postgres/base/1/2605
Normal file
BIN
data/postgres/base/1/2605
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2605_fsm
Normal file
BIN
data/postgres/base/1/2605_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2605_vm
Normal file
BIN
data/postgres/base/1/2605_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2606
Normal file
BIN
data/postgres/base/1/2606
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2606_fsm
Normal file
BIN
data/postgres/base/1/2606_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2606_vm
Normal file
BIN
data/postgres/base/1/2606_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2607
Normal file
BIN
data/postgres/base/1/2607
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2607_fsm
Normal file
BIN
data/postgres/base/1/2607_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2607_vm
Normal file
BIN
data/postgres/base/1/2607_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2608
Normal file
BIN
data/postgres/base/1/2608
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2608_fsm
Normal file
BIN
data/postgres/base/1/2608_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2608_vm
Normal file
BIN
data/postgres/base/1/2608_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2609
Normal file
BIN
data/postgres/base/1/2609
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2609_fsm
Normal file
BIN
data/postgres/base/1/2609_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2609_vm
Normal file
BIN
data/postgres/base/1/2609_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2610
Normal file
BIN
data/postgres/base/1/2610
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2610_fsm
Normal file
BIN
data/postgres/base/1/2610_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2610_vm
Normal file
BIN
data/postgres/base/1/2610_vm
Normal file
Binary file not shown.
0
data/postgres/base/1/2611
Normal file
0
data/postgres/base/1/2611
Normal file
BIN
data/postgres/base/1/2612
Normal file
BIN
data/postgres/base/1/2612
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2612_fsm
Normal file
BIN
data/postgres/base/1/2612_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2612_vm
Normal file
BIN
data/postgres/base/1/2612_vm
Normal file
Binary file not shown.
0
data/postgres/base/1/2613
Normal file
0
data/postgres/base/1/2613
Normal file
BIN
data/postgres/base/1/2615
Normal file
BIN
data/postgres/base/1/2615
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2615_fsm
Normal file
BIN
data/postgres/base/1/2615_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2615_vm
Normal file
BIN
data/postgres/base/1/2615_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2616
Normal file
BIN
data/postgres/base/1/2616
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2616_fsm
Normal file
BIN
data/postgres/base/1/2616_fsm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2616_vm
Normal file
BIN
data/postgres/base/1/2616_vm
Normal file
Binary file not shown.
BIN
data/postgres/base/1/2617
Normal file
BIN
data/postgres/base/1/2617
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user