Commit a2c54337 authored by EnesKarakas's avatar EnesKarakas
Browse files

daw

parent a454f48f
...@@ -48,10 +48,10 @@ public interface ForecastweatherApi { ...@@ -48,10 +48,10 @@ public interface ForecastweatherApi {
ResponseEntity<Modelforecast> forecastWeatherData( ResponseEntity<Modelforecast> forecastWeatherData(
@NotNull @Parameter(in = ParameterIn.QUERY, description = "For the query value, type the city name and optionally the country code divided by comma; use ISO 3166 country codes.", required = true, schema = @Schema()) @Valid @RequestParam(value = "q", required = true) String q, @NotNull @Parameter(in = ParameterIn.QUERY, description = "For the query value, type the city name and optionally the country code divided by comma; use ISO 3166 country codes.", required = true, schema = @Schema()) @Valid @RequestParam(value = "q", required = true) String q,
@Parameter(in = ParameterIn.QUERY, description = "forcast days", schema = @Schema()) @Valid @RequestParam(value = "days", required = true) int days, @Parameter(in = ParameterIn.QUERY, description = "forcast days", required = true, schema = @Schema()) @Valid @RequestParam(value = "days", required = true) int days,
@Parameter(in = ParameterIn.QUERY, description = "show alerts", schema = @Schema()) @Valid @RequestParam(value = "alerts", required = true) String alerts, @Parameter(in = ParameterIn.QUERY, description = "show alerts", required = true, schema = @Schema()) @Valid @RequestParam(value = "alerts", required = true) String alerts,
@Parameter(in = ParameterIn.QUERY, description = "filter parameter", schema = @Schema()) @Valid @RequestParam(value = "filter", required = false) String filter); @Parameter(in = ParameterIn.QUERY, description = "filter parameter", required = false, schema = @Schema()) @Valid @RequestParam(value = "filter", required = false) String filter);
} }
...@@ -59,7 +59,7 @@ public class ForecastweatherApiController implements ForecastweatherApi { ...@@ -59,7 +59,7 @@ public class ForecastweatherApiController implements ForecastweatherApi {
@Parameter(in = ParameterIn.QUERY, description = "shows alerts", required = true, schema = @Schema()) @Valid @RequestParam(value = "alerts", required = true) String alerts, @Parameter(in = ParameterIn.QUERY, description = "shows alerts", required = true, schema = @Schema()) @Valid @RequestParam(value = "alerts", required = true) String alerts,
@Parameter(in = ParameterIn.QUERY, description = "filter parameter", schema = @Schema()) @Valid @RequestParam(value = "filter", required = false) String filter) { @Parameter(in = ParameterIn.QUERY, description = "filter parameter", required = false, schema = @Schema()) @Valid @RequestParam(value = "filter", required = false) String filter) {
try { try {
String datafree = "{\"location\":{},\"current\": {\"condition\": {},\"air_quality\": {}}}"; String datafree = "{\"location\":{},\"current\": {\"condition\": {},\"air_quality\": {}}}";
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
*/ */
package io.swagger.api; package io.swagger.api;
import io.swagger.model.InlineResponse200;
import io.swagger.model.Model200; import io.swagger.model.Model200;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
...@@ -36,17 +37,33 @@ import java.util.Map; ...@@ -36,17 +37,33 @@ import java.util.Map;
@Validated @Validated
public interface HistoricalweatherApi { public interface HistoricalweatherApi {
@Operation(summary = "Call Historical weather data for one location", description = "Get the historical weather info", tags={ "Historical Weather Data" }) @Operation(summary = "Call Historical weather data for one location", description = "Get the historical weather info", tags = {
@ApiResponses(value = { "Historical Weather Data" })
@ApiResponse(responseCode = "200", description = "Successful response", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Model200.class))), @ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Successful response", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Model200.class))),
@ApiResponse(responseCode = "404", description = "Not found response", content = @Content(mediaType = "text/plain", schema = @Schema(implementation = String.class))) })
@RequestMapping(value = "/historicalweather",
produces = { "application/json", "text/plain" },
method = RequestMethod.GET)
ResponseEntity<Model200> historicalWeatherData(@NotNull @Parameter(in = ParameterIn.QUERY, description = "For the query value, type the city name and optionally the country code divided by comma; use ISO 3166 country codes." ,required=true,schema=@Schema()) @Valid @RequestParam(value = "q", required = true) String q
, @Parameter(in = ParameterIn.QUERY, description = "filter parameter" ,schema=@Schema()) @Valid @RequestParam(value = "filter", required = false) String filter
);
} @ApiResponse(responseCode = "404", description = "Not found response", content = @Content(mediaType = "text/plain", schema = @Schema(implementation = String.class))) })
@RequestMapping(value = "/historicalweather", produces = { "application/json",
"text/plain" }, method = RequestMethod.GET)
ResponseEntity<InlineResponse200> historicalWeatherData(
@NotNull @Parameter(in = ParameterIn.QUERY, description = "Latitude of the location", required = true, schema = @Schema()) @Valid @RequestParam(value = "latitude", required = true) Float latitude,
@NotNull @Parameter(in = ParameterIn.QUERY, description = "Longitude of the location", required = true, schema = @Schema()) @Valid @RequestParam(value = "longitude", required = true) Float longitude,
@NotNull @Parameter(in = ParameterIn.QUERY, description = "The time interval to get weather data. A day must be specified as an ISO8601 date (e.g. 2022-12-31).", required = true, schema = @Schema()) @Valid @RequestParam(value = "start_date", required = true) String start_date,
@NotNull @Parameter(in = ParameterIn.QUERY, description = "The time interval to get weather data. A day must be specified as an ISO8601 date (e.g. 2022-12-31).", required = true, schema = @Schema()) @Valid @RequestParam(value = "end_date", required = true) String end_date,
@Parameter(in = ParameterIn.QUERY, description = "If fahrenheit is set, all temperature values are converted to Fahrenheit.", required = false, schema = @Schema()) @Valid @RequestParam(value = "temperature_unit", required = false) String temperature_unit,
@Parameter(in = ParameterIn.QUERY, description = "Other wind speed speed units: ms, mph and kn", required = false, schema = @Schema()) @Valid @RequestParam(value = "wind_speed_unit", required = false) String wind_speed_unit,
@Parameter(in = ParameterIn.QUERY, description = "Other precipitation amount units: inch", required = false, schema = @Schema()) @Valid @RequestParam(value = "precipitation_unit", required = false) String precipitation_unit,
@Parameter(in = ParameterIn.QUERY, description = "If timezone is set, all timestamps are returned as local-time and data is returned starting at 00:00 local-time. Any time zone name from the time zone database is supported If auto is set as a time zone, the coordinates will be automatically resolved to the local time zone. For multiple coordinates, a comma separated list of timezones can be specified.", required = false, schema = @Schema()) @Valid @RequestParam(value = "timezone", required = false) String timezone,
@Parameter(in = ParameterIn.QUERY, description = "filter parameter hourly", required = false, schema = @Schema()) @Valid @RequestParam(value = "filterHourly", required = false) String filterHourly,
@Parameter(in = ParameterIn.QUERY, description = "filter parameter daily", required = false, schema = @Schema()) @Valid @RequestParam(value = "filterDaily", required = false) String filterDaily);
}
package io.swagger.api; package io.swagger.api;
import io.swagger.model.Model200; import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.v3.oas.annotations.Operation; import javax.servlet.http.HttpServletRequest;
import io.swagger.v3.oas.annotations.Parameter; import javax.validation.Valid;
import io.swagger.v3.oas.annotations.enums.ParameterIn; import javax.validation.constraints.NotNull;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.client.RestTemplate;
import javax.validation.Valid; import com.fasterxml.jackson.databind.ObjectMapper;
import javax.validation.constraints.*;
import javax.servlet.http.HttpServletRequest; import io.swagger.model.InlineResponse200;
import java.io.IOException; import io.swagger.v3.oas.annotations.Parameter;
import java.util.List; import io.swagger.v3.oas.annotations.enums.ParameterIn;
import java.util.Map; import io.swagger.v3.oas.annotations.media.Schema;
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-06-04T09:41:03.559554872Z[GMT]") @javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-06-04T09:41:03.559554872Z[GMT]")
@RestController @RestController
...@@ -48,20 +37,50 @@ public class HistoricalweatherApiController implements HistoricalweatherApi { ...@@ -48,20 +37,50 @@ public class HistoricalweatherApiController implements HistoricalweatherApi {
this.request = request; this.request = request;
} }
public ResponseEntity<Model200> historicalWeatherData(@NotNull @Parameter(in = ParameterIn.QUERY, description = "For the query value, type the city name and optionally the country code divided by comma; use ISO 3166 country codes." ,required=true,schema=@Schema()) @Valid @RequestParam(value = "q", required = true) String q public ResponseEntity<InlineResponse200> historicalWeatherData(
,@Parameter(in = ParameterIn.QUERY, description = "filter parameter" ,schema=@Schema()) @Valid @RequestParam(value = "filter", required = false) String filter
) { @NotNull @Parameter(in = ParameterIn.QUERY, description = "Latitude of the location", required = true, schema = @Schema()) @Valid @RequestParam(value = "latitude", required = true) Float latitude,
String accept = request.getHeader("Accept");
if (accept != null && accept.contains("application/json")) { @NotNull @Parameter(in = ParameterIn.QUERY, description = "Longitude of the location", required = true, schema = @Schema()) @Valid @RequestParam(value = "longitude", required = true) Float longitude,
try {
return new ResponseEntity<Model200>(objectMapper.readValue("{\n \"weather\" : {\n \"feelslike_c\" : 803.463,\n \"feelslike_f\" : 803.463,\n \"wind_degree\" : 803234,\n \"windchill_f\" : 803.478,\n \"windchill_c\" : 803.367,\n \"last_updated_epoch\" : 1238213521,\n \"temp_c\" : 8.3,\n \"temp_f\" : 8.8,\n \"cloud\" : 80338,\n \"wind_kph\" : 803.29,\n \"wind_mph\" : 80.39,\n \"humidity\" : 8039,\n \"dewpoint_f\" : 803.38,\n \"uv\" : 803.473,\n \"last_updated\" : \"2001-10-09 10:07\",\n \"id_day\" : 803.29,\n \"heatindex_f\" : 803.736,\n \"dewpoint_c\" : 803.83,\n \"precip_in\" : 803.473,\n \"heatindex_c\" : 803287,\n \"air_quality\" : {\n \"no2\" : 3.4,\n \"o3\" : 234.3,\n \"us-epa-index\" : 32,\n \"so2\" : 490.34,\n \"pm2_5\" : 96.34,\n \"pm10\" : 22.3,\n \"co\" : 234.32,\n \"gb-defra-index\" : 9999\n },\n \"wind_dir\" : \"SSE\",\n \"gust_mph\" : 803.37,\n \"pressure_in\" : 803.3841,\n \"gust_kph\" : 803.3662,\n \"precip_mm\" : 803.438,\n \"condition\" : {\n \"code\" : 1003,\n \"icon\" : \"//cdn.weatherapi.com/weather/64x64/day/116.png\",\n \"text\" : \"overcast\"\n },\n \"vis_km\" : 803.37,\n \"pressure_mb\" : 86.5,\n \"vis_miles\" : 803.48\n },\n \"location\" : {\n \"localtime\" : \"2001-10-09 10:07\",\n \"country\" : \"Germany\",\n \"localtime_epoch\" : 1717491434,\n \"name\" : \"stuttgart\",\n \"lon\" : 48.78,\n \"region\" : \"baden wuerttemberg\",\n \"lat\" : 9.17,\n \"tz_id\" : \"europa/berlin\"\n }\n}", Model200.class), HttpStatus.NOT_IMPLEMENTED); @NotNull @Parameter(in = ParameterIn.QUERY, description = "The time interval to get weather data. A day must be specified as an ISO8601 date (e.g. 2022-12-31).", required = true, schema = @Schema()) @Valid @RequestParam(value = "start_date", required = true) String start_date,
} catch (IOException e) {
log.error("Couldn't serialize response for content type application/json", e); @NotNull @Parameter(in = ParameterIn.QUERY, description = "The time interval to get weather data. A day must be specified as an ISO8601 date (e.g. 2022-12-31).", required = true, schema = @Schema()) @Valid @RequestParam(value = "end_date", required = true) String end_date,
return new ResponseEntity<Model200>(HttpStatus.INTERNAL_SERVER_ERROR);
} @Parameter(in = ParameterIn.QUERY, description = "If fahrenheit is set, all temperature values are converted to Fahrenheit.", required = false, schema = @Schema()) @Valid @RequestParam(value = "temperature_unit", required = false) String temperature_unit,
@Parameter(in = ParameterIn.QUERY, description = "Other wind speed speed units: ms, mph and kn", required = false, schema = @Schema()) @Valid @RequestParam(value = "wind_speed_unit", required = false) String wind_speed_unit,
@Parameter(in = ParameterIn.QUERY, description = "Other precipitation amount units: inch", required = false, schema = @Schema()) @Valid @RequestParam(value = "precipitation_unit", required = false) String precipitation_unit,
@Parameter(in = ParameterIn.QUERY, description = "If timezone is set, all timestamps are returned as local-time and data is returned starting at 00:00 local-time. Any time zone name from the time zone database is supported If auto is set as a time zone, the coordinates will be automatically resolved to the local time zone. For multiple coordinates, a comma separated list of timezones can be specified.", required = false, schema = @Schema()) @Valid @RequestParam(value = "timezone", required = false) String timezone,
@Parameter(in = ParameterIn.QUERY, description = "filter parameter hourly", required = false, schema = @Schema()) @Valid @RequestParam(value = "filterHourly", required = false) String filterHourly,
@Parameter(in = ParameterIn.QUERY, description = "filter parameter daily", required = false, schema = @Schema()) @Valid @RequestParam(value = "filterDaily", required = false) String filterDaily
) {
try {
String datafree = "{\"location\":{},\"current\": {\"condition\": {},\"air_quality\": {}}}";
RestTemplate restTemplate = new RestTemplate();
ApiService apiService = new ApiService(restTemplate);
String data = apiService.getDataFromFirstApi(
"https://archive-api.open-meteo.com/v1/archive?latitude=" + latitude + "&longitude=" + longitude
+ "&start_date=" + start_date + "&end_date=" + end_date
+ "&hourly=" + filterHourly + "&daily=" + filterDaily + "&temperature_unit="
+ temperature_unit + "&wind_speed_unit=" + wind_speed_unit + "&precipitation_unit="
+ precipitation_unit);
ResponseEntity<InlineResponse200> response = new ResponseEntity<InlineResponse200>(objectMapper.readValue(
data, InlineResponse200.class), HttpStatus.ACCEPTED);
return response;
} catch (IOException e) {
log.error("Couldn't serialize response for content type application/json", e);
return new ResponseEntity<InlineResponse200>(HttpStatus.INTERNAL_SERVER_ERROR);
} }
return new ResponseEntity<Model200>(HttpStatus.NOT_IMPLEMENTED);
} }
} }
package io.swagger.model;
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.constraints.*;
/**
* InlineResponse200
*/
@Validated
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-06-08T14:34:21.706302463Z[GMT]")
public class InlineResponse200 {
@JsonProperty("latitude")
private Float latitude = null;
@JsonProperty("longitude")
private Float longitude = null;
@JsonProperty("generationtime_ms")
private Float generationtimeMs = null;
@JsonProperty("utc_offset_seconds")
private Integer utcOffsetSeconds = null;
@JsonProperty("timezone")
private String timezone = null;
@JsonProperty("timezone_abbreviation")
private String timezoneAbbreviation = null;
@JsonProperty("elevation")
private Integer elevation = null;
@JsonProperty("hourly_units")
private Object hourlyUnits = null;
@JsonProperty("hourly")
private Object hourly = null;
@JsonProperty("daily_units")
private Object dailyUnits = null;
@JsonProperty("daily")
private Object daily = null;
public InlineResponse200 latitude(Float latitude) {
this.latitude = latitude;
return this;
}
/**
* Get latitude
* @return latitude
**/
@Schema(description = "")
@NotNull
public Float getLatitude() {
return latitude;
}
public void setLatitude(Float latitude) {
this.latitude = latitude;
}
public InlineResponse200 longitude(Float longitude) {
this.longitude = longitude;
return this;
}
/**
* Get longitude
* @return longitude
**/
@Schema(description = "")
@NotNull
public Float getLongitude() {
return longitude;
}
public void setLongitude(Float longitude) {
this.longitude = longitude;
}
public InlineResponse200 generationtimeMs(Float generationtimeMs) {
this.generationtimeMs = generationtimeMs;
return this;
}
/**
* Get generationtimeMs
* @return generationtimeMs
**/
@Schema(description = "")
@NotNull
public Float getGenerationtimeMs() {
return generationtimeMs;
}
public void setGenerationtimeMs(Float generationtimeMs) {
this.generationtimeMs = generationtimeMs;
}
public InlineResponse200 utcOffsetSeconds(Integer utcOffsetSeconds) {
this.utcOffsetSeconds = utcOffsetSeconds;
return this;
}
/**
* Get utcOffsetSeconds
* @return utcOffsetSeconds
**/
@Schema(description = "")
@NotNull
public Integer getUtcOffsetSeconds() {
return utcOffsetSeconds;
}
public void setUtcOffsetSeconds(Integer utcOffsetSeconds) {
this.utcOffsetSeconds = utcOffsetSeconds;
}
public InlineResponse200 timezone(String timezone) {
this.timezone = timezone;
return this;
}
/**
* Get timezone
* @return timezone
**/
@Schema(description = "")
@NotNull
public String getTimezone() {
return timezone;
}
public void setTimezone(String timezone) {
this.timezone = timezone;
}
public InlineResponse200 timezoneAbbreviation(String timezoneAbbreviation) {
this.timezoneAbbreviation = timezoneAbbreviation;
return this;
}
/**
* Get timezoneAbbreviation
* @return timezoneAbbreviation
**/
@Schema(description = "")
@NotNull
public String getTimezoneAbbreviation() {
return timezoneAbbreviation;
}
public void setTimezoneAbbreviation(String timezoneAbbreviation) {
this.timezoneAbbreviation = timezoneAbbreviation;
}
public InlineResponse200 elevation(Integer elevation) {
this.elevation = elevation;
return this;
}
/**
* Get elevation
* @return elevation
**/
@Schema(description = "")
@NotNull
public Integer getElevation() {
return elevation;
}
public void setElevation(Integer elevation) {
this.elevation = elevation;
}
public InlineResponse200 hourlyUnits(Object hourlyUnits) {
this.hourlyUnits = hourlyUnits;
return this;
}
/**
* Get hourlyUnits
* @return hourlyUnits
**/
@Schema(description = "")
@NotNull
public Object getHourlyUnits() {
return hourlyUnits;
}
public void setHourlyUnits(Object hourlyUnits) {
this.hourlyUnits = hourlyUnits;
}
public InlineResponse200 hourly(Object hourly) {
this.hourly = hourly;
return this;
}
/**
* Get hourly
* @return hourly
**/
@Schema(description = "")
@NotNull
public Object getHourly() {
return hourly;
}
public void setHourly(Object hourly) {
this.hourly = hourly;
}
public InlineResponse200 dailyUnits(Object dailyUnits) {
this.dailyUnits = dailyUnits;
return this;
}
/**
* Get dailyUnits
* @return dailyUnits
**/
@Schema(description = "")
@NotNull
public Object getDailyUnits() {
return dailyUnits;
}
public void setDailyUnits(Object dailyUnits) {
this.dailyUnits = dailyUnits;
}
public InlineResponse200 daily(Object daily) {
this.daily = daily;
return this;
}
/**
* Get daily
* @return daily
**/
@Schema(description = "")
@NotNull
public Object getDaily() {
return daily;
}
public void setDaily(Object daily) {
this.daily = daily;
}
@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
InlineResponse200 inlineResponse200 = (InlineResponse200) o;
return Objects.equals(this.latitude, inlineResponse200.latitude) &&
Objects.equals(this.longitude, inlineResponse200.longitude) &&
Objects.equals(this.generationtimeMs, inlineResponse200.generationtimeMs) &&
Objects.equals(this.utcOffsetSeconds, inlineResponse200.utcOffsetSeconds) &&
Objects.equals(this.timezone, inlineResponse200.timezone) &&
Objects.equals(this.timezoneAbbreviation, inlineResponse200.timezoneAbbreviation) &&
Objects.equals(this.elevation, inlineResponse200.elevation) &&
Objects.equals(this.hourlyUnits, inlineResponse200.hourlyUnits) &&
Objects.equals(this.hourly, inlineResponse200.hourly) &&
Objects.equals(this.dailyUnits, inlineResponse200.dailyUnits) &&
Objects.equals(this.daily, inlineResponse200.daily);
}
@Override
public int hashCode() {
return Objects.hash(latitude, longitude, generationtimeMs, utcOffsetSeconds, timezone, timezoneAbbreviation, elevation, hourlyUnits, hourly, dailyUnits, daily);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class InlineResponse200 {\n");
sb.append(" latitude: ").append(toIndentedString(latitude)).append("\n");
sb.append(" longitude: ").append(toIndentedString(longitude)).append("\n");
sb.append(" generationtimeMs: ").append(toIndentedString(generationtimeMs)).append("\n");
sb.append(" utcOffsetSeconds: ").append(toIndentedString(utcOffsetSeconds)).append("\n");
sb.append(" timezone: ").append(toIndentedString(timezone)).append("\n");
sb.append(" timezoneAbbreviation: ").append(toIndentedString(timezoneAbbreviation)).append("\n");
sb.append(" elevation: ").append(toIndentedString(elevation)).append("\n");
sb.append(" hourlyUnits: ").append(toIndentedString(hourlyUnits)).append("\n");
sb.append(" hourly: ").append(toIndentedString(hourly)).append("\n");
sb.append(" dailyUnits: ").append(toIndentedString(dailyUnits)).append("\n");
sb.append(" daily: ").append(toIndentedString(daily)).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(java.lang.Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment