You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DIP/TED_NOTICE_URL.md

3.5 KiB

TED Notice URL Feature

Übersicht

Jedes Dokument in der Datenbank hat jetzt eine automatisch generierte notice_url Spalte, die direkt auf die TED-Webseite verlinkt.

Format

https://ted.europa.eu/en/notice/-/detail/{publication_id ohne führende Nullen}

Beispiel:

  • publication_id: 00786665-2025
  • notice_url: https://ted.europa.eu/en/notice/-/detail/786665-2025

Automatische Generierung

Die URL wird automatisch beim Speichern eines Dokuments generiert:

@PrePersist
@PreUpdate
private void generateNoticeUrl() {
    if (publicationId != null && !publicationId.isEmpty()) {
        String cleanId = publicationId.replaceFirst("^0+", "");
        this.noticeUrl = "https://ted.europa.eu/en/notice/-/detail/" + cleanId;
    }
}

Datenbankstruktur

Spalte

ALTER TABLE ted.procurement_document
    ADD COLUMN notice_url VARCHAR(255);

CREATE INDEX idx_doc_notice_url ON ted.procurement_document(notice_url);

Existierende Datensätze

URLs für existierende Datensätze werden automatisch generiert:

UPDATE ted.procurement_document
SET notice_url = 'https://ted.europa.eu/en/notice/-/detail/' ||
    REGEXP_REPLACE(publication_id, '^0+', '')
WHERE publication_id IS NOT NULL
  AND notice_url IS NULL;

Verwendung

Repository-Abfrage

// Nach URL suchen
Optional<ProcurementDocument> doc = repository.findByNoticeUrl(
    "https://ted.europa.eu/en/notice/-/detail/786665-2025"
);

Entity-Zugriff

ProcurementDocument doc = new ProcurementDocument();
doc.setPublicationId("00786665-2025");
// notice_url wird automatisch beim Speichern generiert
repository.save(doc);

// URL abrufen
String url = doc.getNoticeUrl();
// "https://ted.europa.eu/en/notice/-/detail/786665-2025"

REST API Beispiel

{
  "id": "20fde305-844b-46b7-bb72-93e86381978d",
  "publicationId": "00786665-2025",
  "noticeUrl": "https://ted.europa.eu/en/notice/-/detail/786665-2025",
  "buyerName": "Example Organization",
  "projectTitle": "Construction Services"
}

Vorteile

Direkte Verlinkung zur offiziellen TED-Webseite Automatische Generierung - keine manuelle Pflege nötig Indiziert für schnelle Suche Konsistentes Format - einheitliche URLs Integration in REST API und Such-Ergebnisse

SQL-Abfragen

URL für Publication ID generieren

SELECT
    publication_id,
    'https://ted.europa.eu/en/notice/-/detail/' ||
    REGEXP_REPLACE(publication_id, '^0+', '') AS notice_url
FROM ted.procurement_document
WHERE publication_id = '00786665-2025';

Alle URLs anzeigen

SELECT
    publication_id,
    notice_url,
    buyer_name,
    project_title
FROM ted.procurement_document
WHERE notice_url IS NOT NULL
ORDER BY created_at DESC
LIMIT 10;

Nach URL-Pattern suchen

SELECT *
FROM ted.procurement_document
WHERE notice_url LIKE '%/786665-2025';

Migration

Beim Hinzufügen des Features wurden:

  1. Spalte notice_url zur Tabelle hinzugefügt
  2. Index idx_doc_notice_url erstellt
  3. URLs für alle existierenden Datensätze generiert
  4. Entity-Klasse mit automatischer Generierung erweitert
  5. Repository-Methode findByNoticeUrl() hinzugefügt

Hinweise

  • Die URL wird nur generiert wenn publication_id vorhanden ist
  • Führende Nullen werden automatisch entfernt (00786665786665)
  • Die URL wird bei jedem Update aktualisiert (falls sich publication_id ändert)
  • Die Spalte ist nicht NOT NULL da alte Datensätze möglicherweise keine publication_id haben