Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
a416fc6
Give unit info in the test-results component
jurei733 Jul 21, 2025
d15d539
Export codebook with missings
jurei733 Jul 22, 2025
aa760a1
Remove stylus
jurei733 Jul 23, 2025
a89e8c4
Fix the circular dependency issue in the NX build system
jurei733 Jul 23, 2025
31509e1
Fix docx File child import
jurei733 Jul 23, 2025
aac90e2
Remove backend dependency from frontend
jurei733 Jul 23, 2025
ef726cb
Fix test and linting
jurei733 Jul 23, 2025
5e16545
Improve the login button look
jurei733 Jul 23, 2025
d94fa73
Update docx npm package
jurei733 Jul 23, 2025
b023b8c
Fix naming
jurei733 Jul 23, 2025
0b45239
Update the Angular Material theme definition in `styles.scss`.
jurei733 Jul 23, 2025
4d2fb68
Increase production warning budget for component style and initial
jurei733 Jul 23, 2025
5d5dabc
Fix form-data vulnerability
jurei733 Jul 23, 2025
9661b34
Create dedicated validation methods in the unit info service
jurei733 Jul 23, 2025
50133d3
Merge pull request #193 from iqb-berlin/codebook
jurei733 Jul 23, 2025
b7870e3
Make app and home component responsive
jurei733 Jul 23, 2025
f184ef3
Add test for test-person-coding service
jurei733 Jul 28, 2025
16e6536
Remove jasmine testing tools
jurei733 Jul 28, 2025
82a6309
Manage job queue with bull and redis
jurei733 Jul 28, 2025
9aad472
Edit schemes with unit schemer
jurei733 Jul 23, 2025
0253481
Merge pull request #197 from iqb-berlin/schemer
jurei733 Jul 28, 2025
abf90a2
Toggle coding manual management
jurei733 Jul 29, 2025
3c9225f
Refactor processTestPersonsBatch
jurei733 Jul 29, 2025
c36c275
Add item variable analysis for coding management
jurei733 Jul 30, 2025
46b6de5
Add replay statistics to ws admin settings
jurei733 Jul 30, 2025
6e790fd
Ensure the test results validation dialog is always completely visibl…
jurei733 Jul 30, 2025
799f421
Enable to delete jobs for test person coding
jurei733 Jul 30, 2025
2aa6ecb
Show hourly and daily distribution of replays
jurei733 Jul 31, 2025
c2fa932
Add error and success data to replay statistics
jurei733 Jul 31, 2025
105f545
Avoid a warning message flickering
jurei733 Jul 31, 2025
5cc1971
Add response_id_idx ON response (id)
jurei733 Jul 31, 2025
addd051
Overwrites for postgres conf
jurei733 Jul 31, 2025
7f3b15d
Fix allowing only single file deletions in the test files component.
jurei733 Jul 31, 2025
9a720ab
Add data cleaning and data export dummy components
jurei733 Jul 31, 2025
ea39d6b
Find coders in the coding management manual component
jurei733 Jul 31, 2025
03db233
Implement Redis-based caching system to cache test result lists per w…
jurei733 Jul 31, 2025
385bf63
Set the version to 0.11.0
jurei733 Jul 31, 2025
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
5 changes: 5 additions & 0 deletions .env.coding-box.template
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ POSTGRES_DB=coding-box
## Backend
JWT_SECRET=random_string

## Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PREFIX=coding-box

## Infrastructure
SERVER_NAME=hostname.de
TRAEFIK_DIR=
44 changes: 44 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,35 @@ dev-db-rollback-lastchangeset:
dev-db-generate-docs:
$(MAKE) -f $(MK_FILE_DIR)/dev-db.mk -C $(MK_FILE_DIR) $@

dev-redis-registry-login:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-registry-logout:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-build:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-up:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-down:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-volumes-clean:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-images-clean:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-monitor:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-info:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-stats:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-ping:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-flush-all:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-flush-db:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@
dev-redis-cli:
$(MAKE) -f $(MK_FILE_DIR)/dev-redis.mk -C $(MK_FILE_DIR) $@

dev-test-app:
$(MAKE) -f $(MK_FILE_DIR)/dev-test.mk -C $(MK_FILE_DIR) $@
dev-test-backend:
Expand Down Expand Up @@ -125,6 +154,21 @@ coding-box-restore-db-data-only:
coding-box-update:
$(MAKE) -f $(MK_FILE_DIR)/prod.mk -C $(MK_FILE_DIR) $@

coding-box-redis-monitor:
$(MAKE) -f $(MK_FILE_DIR)/prod.mk -C $(MK_FILE_DIR) $@
coding-box-redis-info:
$(MAKE) -f $(MK_FILE_DIR)/prod.mk -C $(MK_FILE_DIR) $@
coding-box-redis-stats:
$(MAKE) -f $(MK_FILE_DIR)/prod.mk -C $(MK_FILE_DIR) $@
coding-box-redis-ping:
$(MAKE) -f $(MK_FILE_DIR)/prod.mk -C $(MK_FILE_DIR) $@
coding-box-redis-flush-all:
$(MAKE) -f $(MK_FILE_DIR)/prod.mk -C $(MK_FILE_DIR) $@
coding-box-redis-flush-db:
$(MAKE) -f $(MK_FILE_DIR)/prod.mk -C $(MK_FILE_DIR) $@
coding-box-redis-cli:
$(MAKE) -f $(MK_FILE_DIR)/prod.mk -C $(MK_FILE_DIR) $@

push-dockerhub:
$(MAKE) -f $(MK_FILE_DIR)/push.mk -C $(MK_FILE_DIR) $@
push-iqb-registry:
Expand Down
25 changes: 25 additions & 0 deletions api-dto/coding/codebook-content-setting.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* Settings for codebook content generation
*/
export interface CodeBookContentSetting {
/** Export format (docx or json) */
exportFormat: string;
/** Missings profile name */
missingsProfile: string;
/** Include only manual coding */
hasOnlyManualCoding: boolean;
/** Include general instructions */
hasGeneralInstructions: boolean;
/** Include derived variables */
hasDerivedVars: boolean;
/** Include only variables with codes */
hasOnlyVarsWithCodes: boolean;
/** Include closed variables */
hasClosedVars: boolean;
/** Convert code labels to uppercase */
codeLabelToUpper: boolean;
/** Show score */
showScore: boolean;
/** Hide item-variable relation */
hideItemVarRelation: boolean;
}
41 changes: 41 additions & 0 deletions api-dto/coding/missings-profiles.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
export interface MissingDto {
id: string;
label: string;
description: string;
code: number;
}

export class MissingsProfilesDto {
id?: number;
label!: string;
missings!: string;

parseMissings(): MissingDto[] {
try {
if (!this.missings) {
return [];
}

if (Array.isArray(this.missings)) {
return this.missings as unknown as MissingDto[];
}

if (typeof this.missings === 'string') {
const parsed = JSON.parse(this.missings);
return Array.isArray(parsed) ? parsed : [];
}

return [];
} catch (error) {
return [];
}
}

setMissings(missings: MissingDto[]): void {
if (typeof missings === 'string') {
this.missings = missings;
} else {
this.missings = JSON.stringify(missings);
}
}
}
31 changes: 31 additions & 0 deletions api-dto/coding/variable-analysis-item.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
export interface VariableAnalysisItemDto {
// Link to the replay of unit with its responses
replayUrl: string;

// Unit ID
unitId: string;

// Variable ID
variableId: string;

// Derivation
derivation: string;

// Code
code: string;

// Description
description: string;

// Score
score: number;

// How often this unitId in combination with variableId with that code is in responses
occurrenceCount: number;

// Total amount of that combination variableId and unit Id
totalCount: number;

// Relative occurrence (for bar chart)
relativeOccurrence: number;
}
10 changes: 10 additions & 0 deletions api-dto/unit-info/unit-coding-scheme-ref.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/**
* Data transfer object for a coding scheme reference
* Based on the CodingSchemeRef element in unit.xsd schema
*/
export class UnitCodingSchemeRefDto {
content!: string;
schemer!: string;
schemeType?: string;
lastChange?: Date;
}
11 changes: 11 additions & 0 deletions api-dto/unit-info/unit-definition.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/**
* Data transfer object for unit definition
* Based on the Definition/DefinitionRef element in unit.xsd schema
*/
export class UnitDefinitionDto {
type!: 'Definition' | 'DefinitionRef';
player!: string;
editor?: string;
content!: string;
lastChange?: Date;
}
9 changes: 9 additions & 0 deletions api-dto/unit-info/unit-dependency.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/**
* Data transfer object for a unit dependency
* Based on the Dependency element in unit.xsd schema
*/
export class UnitDependencyDto {
type!: 'File' | 'Service';
content!: string;
for!: 'player' | 'editor' | 'schemer' | 'coder';
}
19 changes: 19 additions & 0 deletions api-dto/unit-info/unit-info.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { UnitMetadataDto } from './unit-metadata.dto';
import { UnitDefinitionDto } from './unit-definition.dto';
import { UnitVariableDto } from './unit-variable.dto';
import { UnitCodingSchemeRefDto } from './unit-coding-scheme-ref.dto';
import { UnitDependencyDto } from './unit-dependency.dto';

/**
* Data transfer object for unit information
* Based on the unit.xsd schema
*/
export class UnitInfoDto {
metadata!: UnitMetadataDto;
definition!: UnitDefinitionDto;
codingSchemeRef?: UnitCodingSchemeRefDto;
dependencies?: UnitDependencyDto[];
baseVariables?: UnitVariableDto[];
derivedVariables?: UnitVariableDto[];
rawXml!: string;
}
12 changes: 12 additions & 0 deletions api-dto/unit-info/unit-metadata.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/**
* Data transfer object for unit metadata
* Based on the Metadata element in unit.xsd schema
*/
export class UnitMetadataDto {
id!: string;
label!: string;
description?: string;
transcript?: string;
reference?: string;
lastChange?: Date;
}
8 changes: 8 additions & 0 deletions api-dto/unit-info/unit-variable-value.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/**
* Data transfer object for a variable value
* Based on the VariableValue element in unit.xsd schema
*/
export class UnitVariableValueDto {
label!: string;
value!: string;
}
18 changes: 18 additions & 0 deletions api-dto/unit-info/unit-variable.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { UnitVariableValueDto } from './unit-variable-value.dto';

/**
* Data transfer object for a unit variable
* Based on the Variable element in unit.xsd schema
*/
export class UnitVariableDto {
id!: string;
alias?: string;
type!: 'string' | 'integer' | 'number' | 'boolean' | 'attachment' | 'json' | 'no-value';
format?: string;
multiple?: boolean;
nullable?: boolean;
page?: string;
values?: UnitVariableValueDto[];
valuesComplete?: boolean;
valuePositionLabels?: string[];
}
12 changes: 10 additions & 2 deletions apps/backend/src/app/admin/admin.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,12 @@ import { VariableAnalysisController } from './variable-analysis/variable-analysi
import { JobsController } from './jobs/jobs.controller';
import { ValidationTaskController } from './workspace/validation-task.controller';
import { BookletInfoController } from './workspace/booklet-info.controller';
import { UnitInfoController } from './workspace/unit-info.controller';
import { MissingsProfilesController } from './workspace/missings-profiles.controller';
import { BookletInfoService } from '../database/services/booklet-info.service';
import { UnitInfoService } from '../database/services/unit-info.service';
import FileUpload from '../database/entities/file_upload.entity';
import { ReplayStatisticsController } from './replay-statistics/replay-statistics.controller';

@Module({
imports: [
Expand All @@ -47,10 +51,14 @@ import FileUpload from '../database/entities/file_upload.entity';
VariableAnalysisController,
JobsController,
ValidationTaskController,
BookletInfoController
BookletInfoController,
UnitInfoController,
MissingsProfilesController,
ReplayStatisticsController
],
providers: [
BookletInfoService
BookletInfoService,
UnitInfoService
]
})
export class AdminModule {}
Loading