content upgrades, contribution contact
This commit is contained in:
		
							parent
							
								
									81bbafeef1
								
							
						
					
					
						commit
						82a3718e3a
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -23,7 +23,8 @@ const KnowledgebaseContributionSchema = z.object({
 | 
			
		||||
  uploadedFiles: z.string().transform(str => {
 | 
			
		||||
    try { return JSON.parse(str); } catch { return []; }
 | 
			
		||||
  }).pipe(z.array(z.any()).default([])),
 | 
			
		||||
  reason: z.string().optional().nullable().transform(val => val || undefined)
 | 
			
		||||
  reason: z.string().optional().nullable().transform(val => val || undefined),
 | 
			
		||||
  contact: z.string().optional().nullable().transform(val => val || undefined)
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
interface KnowledgebaseContributionData {
 | 
			
		||||
@ -37,6 +38,7 @@ interface KnowledgebaseContributionData {
 | 
			
		||||
  tags: string[];
 | 
			
		||||
  uploadedFiles: any[];
 | 
			
		||||
  reason?: string;
 | 
			
		||||
  contact?: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const rateLimitStore = new Map<string, { count: number; resetTime: number }>();
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,8 @@ const ContributionRequestSchema = z.object({
 | 
			
		||||
  }),
 | 
			
		||||
  tool: ContributionToolSchema,
 | 
			
		||||
  metadata: z.object({
 | 
			
		||||
    reason: z.string().transform(val => val.trim() === '' ? undefined : val).optional()
 | 
			
		||||
    reason: z.string().transform(val => val.trim() === '' ? undefined : val).optional(),
 | 
			
		||||
    contact: z.string().transform(val => val.trim() === '' ? undefined : val).optional()
 | 
			
		||||
  }).optional()
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@ -168,7 +169,8 @@ export const POST: APIRoute = async ({ request }) => {
 | 
			
		||||
      tool: validatedData.tool,
 | 
			
		||||
      metadata: {
 | 
			
		||||
        submitter: userEmail,
 | 
			
		||||
        reason: validatedData.metadata?.reason
 | 
			
		||||
        reason: validatedData.metadata?.reason,
 | 
			
		||||
        contact: validatedData.metadata?.contact
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -171,6 +171,18 @@ const sortedTools = data.tools.sort((a: any, b: any) => a.name.localeCompare(b.n
 | 
			
		||||
              class="form-input"
 | 
			
		||||
            ></textarea>
 | 
			
		||||
          </div>
 | 
			
		||||
          
 | 
			
		||||
          <div class="form-group">
 | 
			
		||||
            <label for="contact" class="form-label">Kontakt (Optional)</label>
 | 
			
		||||
            <input 
 | 
			
		||||
              type="text" 
 | 
			
		||||
              id="contact" 
 | 
			
		||||
              name="contact" 
 | 
			
		||||
              placeholder="Discord: @username, Telegram: @username, oder andere Kontaktmöglichkeit"
 | 
			
		||||
              class="form-input"
 | 
			
		||||
            />
 | 
			
		||||
            <small class="form-help">Wird nur im Git-Issue angezeigt, falls Nachfragen entstehen</small>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="form-actions">
 | 
			
		||||
 | 
			
		||||
@ -232,6 +232,15 @@ const isEdit = !!editTool;
 | 
			
		||||
              <span id="reason-count">0</span>/500
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div style="margin-bottom: 1.5rem;">
 | 
			
		||||
            <label for="contact" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">Kontakt (Optional)</label>
 | 
			
		||||
            <input type="text" id="contact" name="contact" 
 | 
			
		||||
                  placeholder="Discord: @username, Telegram: @username, oder andere Kontaktmöglichkeit" 
 | 
			
		||||
                  class="form-input" />
 | 
			
		||||
            <small style="display: block; margin-top: 0.25rem; color: var(--color-text-secondary); font-size: 0.8125rem;">
 | 
			
		||||
              Wird nur im Git-Issue angezeigt, falls Nachfragen entstehen
 | 
			
		||||
            </small>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div style="border: 1px solid var(--color-border); border-radius: 0.5rem; padding: 1.5rem; margin-bottom: 2rem;">
 | 
			
		||||
 | 
			
		||||
@ -25,6 +25,7 @@ export interface ContributionData {
 | 
			
		||||
  metadata: {
 | 
			
		||||
    submitter: string;
 | 
			
		||||
    reason?: string;
 | 
			
		||||
    contact?: string; 
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -47,6 +48,7 @@ interface KnowledgebaseContribution {
 | 
			
		||||
  uploadedFiles?: { name: string; url: string }[];
 | 
			
		||||
  submitter: string;
 | 
			
		||||
  reason?: string;
 | 
			
		||||
  contact?: string; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface GitConfig {
 | 
			
		||||
@ -274,6 +276,10 @@ ${data.tool.phases?.length ? `- **Phases:** ${data.tool.phases.join(', ')}` : ''
 | 
			
		||||
${data.metadata.reason ? `### Reason
 | 
			
		||||
${data.metadata.reason}
 | 
			
		||||
 | 
			
		||||
` : ''}${data.metadata.contact ? `### Contact
 | 
			
		||||
${data.metadata.contact}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
` : ''}### Copy-Paste YAML
 | 
			
		||||
 | 
			
		||||
\`\`\`yaml
 | 
			
		||||
@ -299,6 +305,7 @@ ${data.metadata.reason}
 | 
			
		||||
    sections.push(`## Knowledge Base Article: ${data.title ?? 'Untitled'}`);
 | 
			
		||||
    sections.push('');
 | 
			
		||||
    sections.push(`**Submitted by:** ${data.submitter}`);
 | 
			
		||||
    if (data.contact) sections.push(`**Contact:** ${data.contact}`);
 | 
			
		||||
    if (data.toolName)   sections.push(`**Related Tool:** ${data.toolName}`);
 | 
			
		||||
    if (data.difficulty) sections.push(`**Difficulty:** ${data.difficulty}`);
 | 
			
		||||
    sections.push('');
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user