---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.name }}-backend
  namespace: {{ .Release.Namespace }}

spec:
  selector:
    matchLabels:
      app: {{ .Values.name }}
      role: backend
  replicas: {{ .Values.api_num_replicas }}
  template:
    metadata:
      labels:
        app: {{ .Values.name }}
        role: backend

      annotations:
        # force helm to update the deployment each time
        {{- if not .Values.frontend_only }}
        "helm.update": {{ randAlphaNum 5 | quote }}
        {{- end }}

    spec:
      {{- if .Values.main_node_type }}
      nodeSelector:
        nodeType: {{ .Values.main_node_type }}
      {{- end }}

      containers:
        - name: api
          image: {{ .Values.api_image }}
          imagePullPolicy: {{ .Values.api_pull_policy }}
          envFrom:
            - configMapRef:
                name: {{ .Values.name }}-env-config
            - secretRef:
                name: auth-secrets
            - secretRef:
                name: mongo-auth

          resources:
            limits:
              cpu: {{ .Values.api_limits_cpu }}
              memory: {{ .Values.api_limits_memory }}

            requests:
              cpu: {{ .Values.api_requests_cpu }}
              memory: {{ .Values.api_requests_memory }}

          startupProbe:
            httpGet:
              path: /healthz
              port: 8000
            initialDelaySeconds: 5
            periodSeconds: 5
            failureThreshold: 30
            successThreshold: 1

          readinessProbe:
            httpGet:
              path: /healthz
              port: 8000
            initialDelaySeconds: 5
            periodSeconds: 30
            failureThreshold: 5
            successThreshold: 1

          livenessProbe:
            httpGet:
              path: /healthz
              port: 8000
            initialDelaySeconds: 5
            periodSeconds: 30
            failureThreshold: 5
            successThreshold: 1

---

apiVersion: v1
kind: Service

metadata:
  namespace: {{ .Release.Namespace }}
  name: {{ .Values.name }}-backend
  labels:
    app: {{ .Values.name }}
    role: backend

{{- if .Values.service }}
  {{- if .Values.service.annotations }}
  annotations:
  {{- range $key, $val := .Values.service.annotations }}
    {{ $key }}: {{ $val | quote }}
  {{- end }}
  {{- end }}
{{- end }}

spec:
  selector:
    app: {{ .Values.name }}
    role: backend

{{- if .Values.service }}
  {{- if .Values.service.type }}
  type: {{ .Values.service.type | quote }}
  {{- end }}
{{- end }}

  ports:
    - protocol: TCP
      port: 8000
      name: api
